IMEI en lote: Luhn, datos de prueba y automatización QA

IMEI en lote: Luhn, datos de prueba y automatización QA

Genera lotes de hasta 50 valores válidos por Luhn con RandomIMEI.com o crea un generador local sin duplicados para conjuntos QA mayores.

Random IMEI Editorial Team · 2026-03-18 · Actualizado el 2026-08-05 · Revisión editorial interna (2026-08-05)

Un IMEI de prueba puede validar un campo, mientras que las pruebas de carga o migración pueden necesitar conjuntos mucho mayores. RandomIMEI.com crea entre 1 y 50 valores por lote web; para cientos o miles, usa un generador local con deduplicación explícita y conserva los resultados en un entorno de pruebas aislado.

Esta guía define un contrato reproducible de datos de prueba: 15 dígitos, suma Luhn correcta, entradas TAC documentadas, gestión explícita de colisiones y respuestas de estado simuladas.


Por Qué No Puedes Usar Simplemente Números de 15 Dígitos Aleatorios

Las cadenas aleatorias de 15 dígitos suelen incumplir uno o más contratos de prueba:

  1. Fallo de Luhn: Un IMEI estándar de 15 dígitos incluye un dígito de control Luhn. Un último dígito uniforme al azar tiene una probabilidad entre diez de coincidir, así que cerca del 90% de las cadenas arbitrarias fallan ante un validador que solo aplica Luhn.

  2. No cubre ramas basadas en prefijo: Algunos sistemas mapean los ocho primeros dígitos mediante un conjunto TAC. Un prefijo arbitrario no ejercita un mapeo conocido y puede tratarse como desconocido si el software consulta una fuente autorizada.

  3. Duplicados no controlados: Cuando el esquema o escenario exige unicidad, los seriales aleatorios pueden colisionar y activar la restricción por el motivo equivocado.

  4. Sin distribución declarada: Una mezcla arbitraria de prefijos no explica qué ramas del producto debe cubrir. Deriva categorías y pesos de tus requisitos, no de una cuota de mercado sin fuente.

Un generador de datos de prueba útil calcula Luhn, usa prefijos documentados para la prueba, elimina duplicados del conjunto actual y permite definir una distribución basada en los requisitos del producto.


Casos de Uso para la Generación Masiva de IMEI

1. Carga inicial de bases de datos y pruebas de esquemas

Al construir o migrar una base de datos, elige una cantidad que ejercite el plan de consulta y las restricciones que quieres medir. Las bases vacías y las pruebas de un registro no revelan:

  • Rendimiento de índices con la cardinalidad planificada
  • Comportamiento del plan de consulta al filtrar por prefijo TAC de fabricante
  • Poda de particiones cuando el esquema particiona por TAC
  • Temporización de validación de restricciones bajo carga de inserción

Registra con la medición de rendimiento la versión de la base de datos, la cantidad de filas, las categorías TAC y las consultas. El resultado sintético solo predice producción en la medida en que esas entradas se parezcan a su carga.

2. Pruebas de carga y medición de rendimiento

Repetir un identificador puede medir la caché en vez de la ruta de consulta. Crea un conjunto acorde al comportamiento de caché, la mezcla de peticiones y la concurrencia de tu propio plan.

Proporciona el conjunto controlado a k6, JMeter, Locust o Gatling y conserva las respuestas de estado tras un servicio local simulado. Una cadena IMEI distinta no crea un registro real de dispositivo.

3. Desarrollo de Plataformas MDM

Un plan MDM puede cubrir inscripción, asignación de políticas, inventario e informes con varios tamaños. Usa las cantidades de tu objetivo de capacidad, no un rango genérico del sector.

Los valores masivos sirven para poblar un inventario simulado o de preproducción sin copiar identificadores de clientes. Las respuestas de inscripción y elegibilidad deben seguir simuladas o usar un entorno de prueba aprobado por el proveedor.

4. Flujos de automatización QA

Las suites automatizadas que validan funciones relacionadas con IMEI necesitan datos únicos en cada ejecución. Incrustar unos pocos IMEI de prueba en el código contamina las pruebas: los casos empiezan a interferirse porque comparten el estado de los mismos identificadores.

Un patrón mejor es generar IMEI nuevos al inicio de cada ejecución, o mantener una reserva grande y pregenerada para extraer valores con un contador o desplazamiento aleatorio. La generación masiva admite ambos enfoques.

5. Simulación de Red de Telecomunicaciones

Quienes prueban integraciones HLR, VLR o EIR pueden modelar campos IMSI e IMEI en registros sintéticos. Define la relación y el estado esperado en los datos de prueba; la generación no aporta identidad de abonado ni estado de equipo.

6. Pruebas de mercados de dispositivos de segunda mano

Las plataformas que verifican el estado IMEI (comprobaciones de lista negra, bloqueo de operador o garantía) necesitan probar su flujo de consulta con entradas variadas. Debes cubrir:

  • Respuesta controlada: el servicio simulado devuelve estado limpio o bloqueado
  • Tiempo de espera agotado o error: el servicio simulado devuelve el formato de fallo del contrato
  • Formato inválido: entrada malformada
  • Mapeo extremo: Luhn correcto con TAC desconocido para el catálogo de prueba

Un valor generado no tiene estado conocido de lista negra, bloqueo de operador o garantía. Prueba esas ramas con respuestas simuladas bajo tu control y no deduzcas un estado «limpio» a partir de la generación.


Requisitos Técnicos para la Generación Masiva de IMEI Válidos

Generar IMEI válidos a escala requiere resolver varios problemas simultáneamente:

Algoritmo de Luhn a Escala

Cada IMEI generado necesita un dígito de verificación Luhn válido. Aquí está el algoritmo implementado en Python, adecuado para generación masiva:

import random

def luhn_check_digit(digits_14: str) -> int:
    """Calcula el dígito de verificación Luhn para una cadena de 14 dígitos."""
    digits = [int(d) for d in digits_14]
    # En una base de 14 dígitos, duplica las posiciones 2, 4, ... 14.
    for i in range(13, -1, -2):
        digits[i] *= 2
        if digits[i] > 9:
            digits[i] -= 9
    total = sum(digits)
    return (10 - (total % 10)) % 10

def generar_imei(tac: str) -> str:
    """Genera un IMEI válido con el TAC de 8 dígitos dado."""
    if len(tac) != 8 or any(ch not in "0123456789" for ch in tac):
        raise ValueError("tac debe contener exactamente 8 dígitos")
    serial = str(random.randint(0, 999999)).zfill(6)
    base = tac + serial
    check = luhn_check_digit(base)
    return base + str(check)

def generar_masivo(tac: str, cantidad: int) -> list[str]:
    """Genera una lista de IMEI únicos válidos para un TAC dado."""
    if not 1 <= cantidad <= 1_000_000:
        raise ValueError("cantidad debe estar entre 1 y 1.000.000")
    vistos = set()
    resultados = []
    while len(resultados) < cantidad:
        imei = generar_imei(tac)
        if imei not in vistos:
            vistos.add(imei)
            resultados.append(imei)
    return resultados

# Ejemplo: genera 1000 datos de prueba con un prefijo explícitamente no oficial
# elegido para esta prueba aislada. Usa tu propia entrada documentada.
imeis = generar_masivo("12345678", 1000)
print(f"Generados {len(imeis)} IMEI únicos")
print(f"Muestra: {imeis[:5]}")

Define la Distribución desde tu Plan de Pruebas

No copies en los datos de prueba una tabla de cuota de mercado sin fuente. Define las categorías y pesos que admite tu producto, documenta de dónde sale cada requisito e incluye una alternativa explícita para un TAC desconocido.

Categoría de prueba Propósito de ejemplo
Mapeo local conocido Ejercitar una rama de etiqueta de dispositivo
Prefijo desconocido Comprobar una alternativa segura
Varias familias configuradas Probar filtros y agregaciones
Entradas repetidas o malformadas Probar restricciones y errores

Garantizar la Unicidad

Si el esquema o escenario exige unicidad, usa uno de estos enfoques:

  1. Deduplicación basada en conjuntos (mostrada en el ejemplo Python anterior): Rastrea los IMEI generados en un conjunto y regenera en caso de colisión.
  2. Seriales secuenciales: incrementa el campo de los dígitos 9–14. Garantiza valores distintos dentro del conjunto de prueba para un TAC. Hay 1.000.000 de combinaciones de entrada, pero Random IMEI no sabe cuáles pueden estar asignadas en el mundo real.

Matemática de Colisiones y Alternativas Deterministas

Un TAC tiene 1.000.000 de entradas seriales de seis dígitos. Con muestreo aleatorio, el número esperado de pares duplicados es aproximadamente n(n-1) / (2 x 1.000.000). Con 1.000 extracciones de un TAC, el valor ronda 0,5, equivalente a cerca de un 39% de probabilidad de al menos una colisión si el generador es uniforme.

Rechazar duplicados con un conjunto limpia la salida, pero pierde eficiencia al llenar el espacio. Los seriales secuenciales hacen reproducible el conjunto de prueba y evitan colisiones internas. Usa más de un TAC solo si el plan necesita distintas categorías de mapeo o más de un millón de entradas distintas.

Matriz de vectores QA

Entrada Resultado esperado Propósito
490154203237518 Luhn correcto Control positivo de la suma
490154203237519 Luhn incorrecto Dígito de control modificado
000000000000000 Luhn correcto, identidad desconocida Demuestra que Luhn no es asignación
49015420323751 Longitud incorrecta Falta el dígito de control
Dos filas idénticas Duplicado según la regla de los datos de prueba Rama de restricción

Integración de IMEI Masivos con Herramientas QA

Con k6 (pruebas de carga JavaScript)

import http from 'k6/http';
import { check } from 'k6';
import { SharedArray } from 'k6/data';

// Pre-carga 50.000 IMEI generados desde un archivo
const imeis = new SharedArray('imeis', function () {
  return open('./test_imeis.txt').split('\n').filter(l => l.length === 15);
});

export default function () {
  // Elige un IMEI aleatorio del conjunto
  const imei = imeis[Math.floor(Math.random() * imeis.length)];

  // Usa un servicio local simulado cuya respuesta controle la prueba.
  const res = http.post('http://localhost:8080/mock/dispositivos/buscar', {
    imei: imei,
  });

  check(res, {
    'estado es 200': (r) => r.status === 200,
    'devuelve info del dispositivo': (r) => r.json('fabricante') !== undefined,
  });
}

Con pytest (suite de pruebas Python)

import pytest
import random

@pytest.fixture
def imei_unico(pool_imeis):
    """Proporciona un IMEI único del conjunto pregenerado."""
    return pool_imeis.pop()

@pytest.fixture(scope="session")
def pool_imeis():
    """Carga el conjunto de IMEI pregenerado al inicio de la sesión."""
    with open("test_data/imeis_masivos.txt") as f:
        imeis = [linea.strip() for linea in f if len(linea.strip()) == 15]
    random.shuffle(imeis)
    return imeis

def test_busqueda_dispositivo(imei_unico, cliente_api):
    respuesta = cliente_api.buscar_dispositivo(imei_unico)
    assert respuesta.status_code == 200
    assert respuesta.json()["formato_valido"] is True

Con SQL (siembra de base de datos)

-- PostgreSQL: inserción masiva desde CSV
CREATE TEMP TABLE temp_imeis (imei CHAR(15));

COPY temp_imeis FROM '/ruta/a/imeis_masivos.csv' CSV;

-- Insertar en la tabla de dispositivos con metadatos adicionales
INSERT INTO dispositivos_prueba (imei, creado_en, estado)
SELECT
    imei,
    NOW() - (random() * INTERVAL '365 days'),
    CASE WHEN random() < 0.95 THEN 'activo' ELSE 'inactivo' END
FROM temp_imeis
ON CONFLICT (imei) DO NOTHING;

SELECT COUNT(*) FROM dispositivos_prueba;  -- Verificar conteo

Uso de RandomIMEI.com para Generación Masiva

RandomIMEI.com admite lotes web pequeños. Puedes:

  • Generar entre 1 y 50 valores por solicitud
  • Seleccionar fabricante y perfil de la copia local fechada
  • Copiar los resultados o descargar un archivo CSV

El sitio no ofrece una API pública de generación. Para automatización o conjuntos mayores, adapta el ejemplo local de Luhn de esta guía y añade entradas deterministas, deduplicación y controles exclusivos para pruebas.

Cada IMEI generado:

  • Tiene un dígito de verificación Luhn válido
  • Usa un prefijo de la copia local versionada y no oficial de Random IMEI
  • Se deduplica dentro del lote web actual

Random IMEI no consulta GSMA, operadores, activación, garantía ni listas negras. Por ello no puede determinar si un resultado está asignado, registrado, bloqueado o será aceptado por otro sistema. Trátalo siempre como dato sintético y no lo envíes a sistemas de identidad reales.


Formatos de Salida para IMEI Masivos

RandomIMEI.com ofrece portapapeles y CSV. Un generador local bajo tu control puede emitir además los formatos que necesite tu entorno de pruebas:

Formato Caso de Uso Ejemplo
Texto plano Scripting shell, importaciones simples Un IMEI por línea
CSV Hojas de cálculo, importaciones portal MDM imei,fabricante,modelo
Lista JSON Integraciones API, herramientas JavaScript ["490154203237518", ...]
Objetos JSON Metadatos ricos para cada IMEI [{"imei": "...", "tac": "35299906", "marca": "Apple"}]
INSERT SQL Siembra directa de base de datos INSERT INTO dispositivos VALUES (...)

Para Qué NO Son los IMEI Generados en Masa

En algunas jurisdicciones y organizaciones, la generación masiva de IMEI puede ser apropiada para datos de prueba aislados cuando la política interna y la ley aplicable lo permitan. No es una herramienta para:

  • Suplantación de IMEI: Reprogramar o falsear el identificador de un dispositivo real puede ser ilegal y queda fuera del propósito del sitio. Mantén los valores generados como datos en pruebas controladas.
  • Eludir listas: Un valor generado no tiene un estado de registro verificado. Nunca lo envíes a un operador, lista negra, activación u otro servicio de identidad en producción.
  • Fraude: Fraude de seguros, fraude de financiación de dispositivos, o cualquier otro esquema que implique falsificar la identidad de un dispositivo. Los datos de prueba generados existen para entornos de desarrollo, no para enviarlos a sistemas del mundo real.

Las leyes varían según la jurisdicción. Usar un identificador falso para acceder a servicios, suplantar un dispositivo o cometer fraude puede ser ilegal; mantén los datos de prueba en entornos controlados y solicita asesoramiento jurídico en flujos regulados.


Preguntas Frecuentes

¿Cuántos IMEI únicos puedo generar de un único código TAC?

El campo serial de seis dígitos tiene 1.000.000 de entradas posibles por TAC. Enumerarlas crea otros tantos valores de prueba distintos, pero Random IMEI no sabe si alguno coincide con un dispositivo asignado. Usa varios TAC cuando el contrato requiera más valores o categorías de mapeo.

¿Cuál es la forma más rápida de generar 1 millón de IMEI de prueba?

Un enfoque determinista consiste en enumerar el rango serial de un prefijo de prueba documentado y calcular Luhn para cada fila. Evita colisiones aleatorias; mide el tiempo y el tamaño del conjunto en tu propio entorno.

¿Puedo usar IMEI generados masivamente en un flujo CI/CD?

Sí. Genera valores mediante un script local previo a las pruebas o conserva un conjunto claramente etiquetado como dato de prueba. RandomIMEI.com no tiene una API pública de generación, por lo que CI debe usar código propio, revisable y reproducible.

¿Funcionan los IMEI generados masivamente con herramientas reales de comprobación IMEI?

Superan las comprobaciones que solo exigen 15 dígitos y una suma Luhn correcta. Otros servicios pueden consultar datos privados de TAC, operador, lista negra o garantía. Random IMEI no conoce ni predice esos resultados, así que no envíes valores generados a servicios de consulta reales.

¿Cómo evito duplicados en un conjunto generado masivamente?

Rechaza colisiones con un conjunto cuando uses seriales aleatorios, o enumera el campo serial de forma determinista. El segundo método evita duplicados internos y hace reproducibles las ejecuciones. Exige unicidad solo cuando forme parte del contrato del esquema o escenario.

¿Existe el riesgo de que un IMEI generado coincida con el IMEI de un dispositivo real?

Sí. Un serial aleatorio dentro de un TAC puede coincidir con un identificador asignado, y Random IMEI no dispone de una base oficial de asignaciones para excluirlo. Mantén los resultados aislados de operadores, activación, garantía, financiación, seguros y listas negras.

Fuentes y lecturas adicionales

Prueba nuestras herramientas

Crea fixtures válidos por Luhn o comprueba el formato de 15 dígitos y checksum de un valor.