Calculadora del Algoritmo de Luhn - Validar Tarjeta de Crédito e IMEI
Calculador gratuito de Luhn mod 10 para validación de tarjetas de crédito, verificación de IMEI y verificación de identidad. Valide números instantáneamente o genere datos de prueba en línea.
Calculadora del Algoritmo de Luhn
Comprobar si su número pasa la validación Luhn mod 10
Documentación
¿Qué es el algoritmo de Luhn?
El algoritmo de Luhn, también llamado algoritmo de módulo 10, es una fórmula que comprueba si una cadena de dígitos podría ser un número de identificación válido. Se usa para detectar errores de digitación en números de tarjetas de crédito, números IMEI de teléfonos y otros códigos de identificación antes de que causen un error. El ingeniero de IBM Hans Peter Luhn describió el método en una patente presentada en 1954.
El algoritmo no demuestra que un número sea real o esté activo. Solo confirma que los dígitos siguen el patrón esperado. Un número de tarjeta puede superar la comprobación de Luhn y aun así ser falso, estar vencido o no tener fondos.
Cómo calcular una suma de comprobación de Luhn
La comprobación se realiza con los dígitos de un número, leídos de derecha a izquierda.
- Empezando por el segundo dígito desde la derecha, duplica uno de cada dos dígitos.
- Si al duplicar un dígito se obtiene un número mayor que 9, réstale 9. (Esto equivale a sumar los dos dígitos del resultado, de modo que 16 se convierte en 1 + 6 = 7, o, de forma equivalente, 16 − 9 = 7).
- Suma todos los dígitos: los duplicados, después del ajuste, y los que no se modificaron.
- Si la suma total es divisible por 10, el número es válido. Si no, es inválido.
Cuando una empresa emite nuevos números de identificación, utiliza los mismos pasos a la inversa. Elige todos los dígitos salvo el último, realiza la comprobación y después selecciona el «dígito de control» final para que el total sea divisible por 10.
Ejemplo resuelto: validación de un número de tarjeta
Tomemos el número de prueba 4532015112830366.
- Dígitos de derecha a izquierda: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- Duplica uno de cada dos dígitos: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- Resta 9 a cualquier resultado superior a 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- Súmalos: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 es divisible por 10, por lo que el número es válido.
Ejemplo resuelto: un número inválido
Tomemos 490154203237517, un número de 15 dígitos con el formato utilizado por los números IMEI.
Al aplicar los mismos pasos se obtiene una suma de 59. Como 59 no es divisible por 10, este número es inválido.
Para convertirlo en un número válido, solo hay que cambiar el último dígito. Al probar cada último dígito posible, se observa que un dígito final de 8 eleva la suma a 60, que es divisible por 10. Por tanto, 490154203237518 es un número de Luhn válido, mientras que cualquier otro último dígito entre 0 y 9 (salvo 8) produce uno inválido.
Dónde se utiliza el algoritmo de Luhn
- Tarjetas de pago. Visa, Mastercard, American Express y otras redes crean sus números de tarjeta de modo que el número completo supere la comprobación de Luhn. Los formularios de pago pueden usarla para detectar un dígito mal escrito antes de contactar con un procesador de pagos.
- Números IMEI. El identificador de 15 dígitos asignado a los teléfonos y otros dispositivos celulares incluye un dígito de control de Luhn.
- Números de seguro social de Canadá. El SIN de 9 dígitos utiliza la misma comprobación.
- Identificador Nacional de Proveedor de EE. UU. (NPI). Los proveedores de atención médica de Estados Unidos reciben un NPI de 10 dígitos validado con una comprobación basada en Luhn.
Qué errores no detecta el algoritmo de Luhn
El algoritmo siempre detecta un único dígito mal escrito, independientemente del dígito o de su posición. También detecta todos los intercambios de dígitos adyacentes (como escribir «39» en lugar de «93»), salvo un caso concreto: intercambiar un 0 y un 9 adyacentes, como convertir «09» en «90».
También no detecta tres errores de «pares gemelos», en los que un par repetido de dígitos se sustituye por otro par repetido: 22 leído como 55, 33 leído como 66 y 44 leído como 77. Como estas limitaciones son conocidas y específicas, la comprobación de Luhn es fiable para detectar errores de escritura habituales, pero no se considera por sí sola un sistema completo de detección de errores.
Luhn no es una comprobación de seguridad
Luhn se diseñó para detectar errores accidentales de introducción de datos, no fraudes. Un número que supera la comprobación está bien formado desde el punto de vista matemático, y nada más. La seguridad real de los pagos depende de otras capas añadidas después de la comprobación de Luhn, como el código CVV de la tarjeta, la verificación de la dirección y la autenticación 3-D Secure. Luhn es simplemente el primer filtro, el más económico, que se ejecuta antes de esas comprobaciones más lentas.
Validación de un número en JavaScript
1function isValidLuhn(number) {
2 const digits = number.replace(/\D/g, '').split('').map(Number);
3 let sum = 0;
4 let doubleDigit = false;
5 for (let i = digits.length - 1; i >= 0; i--) {
6 let d = digits[i];
7 if (doubleDigit) {
8 d *= 2;
9 if (d > 9) d -= 9;
10 }
11 sum += d;
12 doubleDigit = !doubleDigit;
13 }
14 return sum % 10 === 0;
15}
16Preguntas frecuentes
¿Para qué se utiliza el algoritmo de Luhn?
Comprueba si un número de identificación, como un número de tarjeta de crédito, un número IMEI o un SIN canadiense, es coherente internamente. Detecta dígitos mal escritos o transpuestos antes de que provoquen un error de procesamiento.
¿Qué precisión tiene el algoritmo de Luhn para detectar errores?
Detecta cualquier dígito mal escrito y casi todos los casos en que se intercambian dos dígitos adyacentes. El único intercambio que no detecta es el de 0 y 9 adyacentes. Tampoco detecta tres sustituciones específicas de «pares gemelos»: 22 por 55, 33 por 66 y 44 por 77.
¿Un número de Luhn válido significa que la tarjeta es real?
No. La comprobación solo confirma que los dígitos encajan en el patrón esperado. No indica si la tarjeta existe, está activa o tiene fondos. Las empresas añaden comprobaciones independientes, como un código CVV, para verificarlo.
¿Se puede realizar la comprobación de Luhn sin un ordenador?
Sí. Solo requiere duplicar, restar y sumar, por lo que puede hacerse a mano o con una calculadora sencilla. Esto formaba parte del diseño original, pensado para la época de las tarjetas perforadas, antes de que los ordenadores digitales fueran habituales.
¿Por qué se llama algoritmo módulo 10?
Porque el paso final comprueba si la suma es divisible exactamente por 10, lo que en matemáticas se escribe «suma mod 10 = 0». «Mod» es la abreviatura de módulo, el resto que queda después de una división.
¿Quién inventó el algoritmo de Luhn?
Hans Peter Luhn, ingeniero de IBM, lo describió en una solicitud de patente presentada en 1954 (concedida en 1960 como la patente estadounidense 2.950.048). También es conocido por sus primeros trabajos sobre la indexación informatizada de textos.
Referencias
- Hans Peter Luhn (IBM). Computer for Verifying Numbers, patente de EE. UU. 2.950.048. Patente de EE. UU. 2.950.048 en Google Patents — patente de Luhn, presentada el 6 de enero de 1954 y concedida el 23 de agosto de 1960.
- 3GPP / ETSI. TS 123 003: Numbering, addressing and identification. ETSI TS 123 003 V17.8.0 — el dígito de control del IMEI se calcula con la fórmula de Luhn.
- Centers for Medicare & Medicaid Services. Requirements for National Provider Identifier (NPI) and NPI Check Digit. Requisitos del dígito de control del NPI según los CMS — el dígito de control del NPI usa la fórmula de Luhn de módulo 10, que también se emplea en los números de emisores de tarjetas.