Cómo validar un IMEI: algoritmo de Luhn explicado
Comprueba el formato y la suma Luhn de un IMEI de 15 dígitos con un ejemplo y vectores QA. No verifica asignación, propiedad ni listas negras.
En esta guía, "válido" significa que el candidato contiene 15 dígitos y el último coincide con la suma de control Luhn de los primeros 14. No demuestra asignación, propiedad, bloqueo de operador, modelo ni estado en listas negras.
El cálculo resuelto y el validador de IMEI comprueban ese contrato limitado al formato.
Qué significa realmente "válido"
Un IMEI supera la validación cuando cumple tres condiciones:
- Longitud — un candidato IMEI tiene exactamente 15 dígitos. IMEISV es un identificador separado de 16 dígitos con dos dígitos de versión de software en lugar del dígito de control IMEI.
- Caracteres — tras normalizar los separadores permitidos, solo quedan dígitos
0–9. - Suma de control — el último dígito (dígito 15) coincide con el valor que el algoritmo de Luhn calcula a partir de los primeros 14 dígitos.
El dígito de control se deriva de los demás. Luhn detecta cualquier sustitución de un dígito y la mayoría de transposiciones adyacentes, pero es una suma de control para detectar errores, no una prueba de identidad.
Superar Luhn no demuestra que el identificador esté asignado, pertenezca al teléfono presentado o figure en una lista negra. Para fuentes de estado, consulta la guía de verificación de IMEI en lista negra.
La forma más rápida: usar un validador
Si solo necesitas una respuesta de sí o no, sáltate las matemáticas:
- Abre el validador de IMEI.
- Pega el número de 15 dígitos (los espacios y guiones se eliminan automáticamente).
- Lee el resultado — válido o no válido — junto con un desglose del TAC, el número de serie y el dígito de control.
Este es el enfoque adecuado para comprobaciones puntuales y para usuarios no técnicos. Pero entender cómo funciona la comprobación te hace mucho mejor detectando datos erróneos, así que veamos el algoritmo paso a paso.
El algoritmo de Luhn, paso a paso
Luhn es una suma de control de módulo 10 usada para IMEI y otros identificadores. Para un candidato IMEI de 15 dígitos, sigue este procedimiento.
Paso 1 — Toma los primeros 14 dígitos
El dígito 15 es el dígito de control; lo compararás al final. Trabaja con los dígitos del 1 al 14.
Paso 2 — Duplica un dígito de cada dos
Empezando por el dígito más a la derecha de esos 14 y avanzando hacia la izquierda, duplica un dígito de cada dos. (De forma equivalente, duplica los dígitos en las posiciones pares contando desde la izquierda.)
Paso 3 — Reduce los resultados de dos cifras
Si al duplicar obtienes un número mayor que 9, resta 9 (o suma las dos cifras entre sí — mismo resultado). Así 12 se convierte en 3, 16 en 7, 10 en 1.
Paso 4 — Suma todo
Suma todos los dígitos procesados: los duplicados y reducidos más los que no se tocaron.
Paso 5 — Calcula el dígito de control
Halla el siguiente múltiplo de 10 igual o superior a tu suma y, después, réstale la suma. Ese resultado es el dígito de control esperado. Si coincide con el dígito 15 de tu IMEI, el número es válido. Si el total ya es un múltiplo de 10, el dígito de control es 0.
Un ejemplo completo
Validemos el IMEI 35 824011 345678 4. Los primeros 14 dígitos son:
3 5 8 2 4 0 1 1 3 4 5 6 7 8
Duplica un dígito de cada dos (los dígitos en las posiciones 2, 4, 6, 8, 10, 12, 14 desde la izquierda — 5, 2, 0, 1, 4, 6, 8):
| Original | Duplicado | Reducido |
|---|---|---|
| 5 | 10 | 1 |
| 2 | 4 | 4 |
| 0 | 0 | 0 |
| 1 | 2 | 2 |
| 4 | 8 | 8 |
| 6 | 12 | 3 |
| 8 | 16 | 7 |
Ahora intercálalos con los dígitos de posición impar sin tocar (3, 8, 4, 1, 3, 5, 7), manteniendo cada dígito en su posición original:
3, 1, 8, 4, 4, 0, 1, 2, 3, 8, 5, 3, 7, 7
Suma: 3 + 1 + 8 + 4 + 4 + 0 + 1 + 2 + 3 + 8 + 5 + 3 + 7 + 7 = 56.
Dígito de control: el siguiente múltiplo de 10 igual o superior a 56 es 60, así que 60 − 56 = 4.
El dígito de control calculado es 4, y el dígito 15 de nuestro IMEI también es 4. Coinciden, así que 358240113456784 es un IMEI válido. (Este es el mismo recorrido que la calculadora de la página de inicio realiza en el servidor para cada número que genera.)
Vectores QA que separan formato e identidad
| Candidato | Resultado de formato | Interpretación |
|---|---|---|
490154203237518 |
Correcto | Control positivo de Luhn; asignación desconocida |
490154203237519 |
Incorrecto | Dígito de control cambiado de 8 a 9 |
000000000000000 |
Correcto | Demuestra que Luhn no prueba identidad |
49015420323751 |
Incorrecto | Solo 14 dígitos; falta el dígito de control |
4901542032375180 |
No es candidato IMEI | Dieciséis dígitos requieren contrato IMEISV separado |
Para pruebas automatizadas reutilizables, descarga los vectores JSON CC0 o consulta el contrato y sus límites (en inglés).
Motivos habituales por los que un IMEI no pasa la validación
Entre las causas habituales de un fallo de formato están:
- Error de transcripción — Luhn detecta un dígito cambiado y muchas transposiciones adyacentes.
- Longitud incorrecta — 14 dígitos carecen del control; 16 deben analizarse con un contrato IMEISV separado.
- Caracteres ocultos — un espacio, guion o espacio de no separación perdido, pegado desde una hoja de cálculo. Normaliza solo espacios, separadores Unicode y guiones ASCII; rechaza cualquier otro carácter.
- No es un IMEI en absoluto — un número de serie, un MEID o una cadena aleatoria que se confundió con un IMEI. Un valor de relleno puede superar Luhn, como demuestra el vector de ceros. Recházalo mediante una regla de negocio explícita, no tratando Luhn como una base de asignaciones.
Comprobar IMEI a gran escala
Validar un número es fácil. Validar miles — en un flujo de QA, en una tarea de detección de fraude o en un script de limpieza de datos — exige automatización. La lógica es lo bastante pequeña como para implementarla en cualquier lenguaje. Aquí tienes la comprobación de Luhn esencial en JavaScript:
function isValidImei(imei) {
const digits = String(imei).replace(/[\s\p{Z}-]+/gu, '');
if (!/^[0-9]{15}$/.test(digits)) return false;
let sum = 0;
for (let i = 0; i < 15; i++) {
let d = Number(digits[i]);
// Duplica un dígito de cada dos desde la derecha.
if ((15 - i) % 2 === 0) {
d *= 2;
if (d > 9) d -= 9;
}
sum += d;
}
return sum % 10 === 0;
}
Fíjate en una propiedad elegante: si incluyes el dígito de control en la suma y el total es divisible entre 10, el IMEI es válido. Es la misma regla, expresada en una sola línea.
Para obtener datos de prueba estructuralmente válidos, Random IMEI genera lotes con prefijos de su copia local de TAC, fechada y no oficial. Expórtalos solo a pruebas aisladas.
Validación y generación tienen contratos distintos
- Validar responde "¿está bien formado este número existente?" Usa el validador de IMEI.
- Generar produce números nuevos y válidos para pruebas. Usa el generador.
Los equipos de QA usan ambos: generan un lote de IMEI válidos como datos de prueba y luego confirman que su aplicación los valida correctamente (y que rechaza los defectuosos que crearon a propósito).
Preguntas frecuentes
¿Cómo compruebo si un IMEI es válido?
Confirma que tiene exactamente 15 dígitos, que contiene solo números y que el último dígito coincide con la suma de control de Luhn de los primeros 14. El método más rápido es pegarlo en el validador de IMEI, que realiza las tres comprobaciones al instante.
¿Qué es el algoritmo de Luhn?
El algoritmo de Luhn (módulo 10) es una fórmula de suma de control que detecta errores accidentales en números de identificación. Para los IMEI, verifica que el dígito 15 sea matemáticamente coherente con los otros 14, detectando la mayoría de los errores tipográficos de un solo dígito y las transposiciones.
¿Un IMEI válido significa que el teléfono es auténtico?
No. La validación solo confirma coherencia interna entre formato y suma de control. No demuestra asignación, modelo, propiedad ni listas negras. Usa una fuente de estado autorizada para esas preguntas.
¿Por qué mi IMEI no pasa la validación?
Las causas más habituales son un dígito mal escrito, una longitud incorrecta (14 o 16 en lugar de 15) o separadores copiados desde otra aplicación. Elimina solo espacios, separadores Unicode y guiones ASCII; rechaza cualquier otro carácter y comprueba la longitud.
¿Puedo validar un IMEI sin conexión?
Sí. La comprobación de Luhn es aritmética simple que no necesita conexión a internet ni base de datos. Puedes calcularla a mano, en una hoja de cálculo o con unas pocas líneas de código como el ejemplo anterior.
¿Un número de 14 dígitos puede ser alguna vez un IMEI válido?
No. Un IMEI estándar tiene 15 dígitos. Un valor de 14 dígitos carece de su dígito de control (puede ser solo el TAC más el número de serie). El IMEISV de 16 dígitos es una variante distinta que sustituye el dígito de control por un número de versión de software de 2 dígitos.
¿Dónde puedo conseguir IMEI válidos para pruebas?
Genéralos. El generador Random IMEI crea valores de 15 dígitos con prefijos de su copia local fechada y sumas de control Luhn correctas. Cada resultado supera esta validación estructural, pero el mapeo no es una consulta oficial de dispositivos.
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.
Artículos relacionados
¿Qué es el IMEI? Estructura, IMEISV y límites de Luhn
El IMEI identifica equipos móviles. Conoce su TAC, serie y dígito de control, sus diferencias con la SIM y lo que Luhn no puede verificar.
¿Qué es un TAC? Los primeros 8 dígitos del IMEI
El TAC corresponde a los primeros 8 dígitos del IMEI y puede asociarse a un tipo mediante datos autorizados. Distingue asignación y consulta.
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.