Saltar al contenido

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

Acción

Comprobar si su número pasa la validación Luhn mod 10

Calculadora de carga...
📚

Documentación

¿Qué es el algoritmo de Luhn?

El algoritmo de Luhn, también llamado algoritmo 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 utiliza para detectar errores de escritura en números de tarjetas de crédito, números IMEI de teléfonos y otros códigos de identificación antes de que provoquen 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.

  1. Empezando por el segundo dígito desde la derecha, duplica uno de cada dos dígitos.
  2. 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).
  3. Suma todos los dígitos: los duplicados, después del ajuste, y los que no se modificaron.
  4. 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.

  1. Dígitos de derecha a izquierda: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
  2. Duplica uno de cada dos dígitos: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
  3. Resta 9 a cualquier resultado superior a 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
  4. Súmalos: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
  5. 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.

Cómo usar esta calculadora

La calculadora tiene dos modos, que se eligen mediante los botones de acción.

Validar comprueba un número a medida que se escribe. No es necesario pulsar ningún botón. El resultado aparece en cuanto el campo contiene dígitos, y un desglose paso a paso debajo muestra cada dígito, el valor que aporta después de duplicarlo y reducirlo, y la suma total.

Generar crea un número que supera la comprobación. Los dígitos que ya estén en el campo se conservan como inicio del nuevo número. La calculadora completa el resto con dígitos aleatorios y añade el dígito de control. El resultado tiene 16 dígitos, la longitud habitual de un número de tarjeta de pago, salvo que los dígitos proporcionados ya sean 16 o más; en ese caso, el resultado tiene un dígito más que los proporcionados.

Los espacios, guiones y puntos de la entrada se ignoran, por lo que «4532 0151 1283 0366» y «4532-0151-1283-0366» se leen de la misma forma que los dígitos sin separadores. Cualquier otro carácter, como una letra, se rechaza con un mensaje de error.

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 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 Estados Unidos (NPI). Los proveedores de atención sanitaria de Estados Unidos reciben un NPI de 10 dígitos validado mediante 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  if (digits.length === 0) return false;
4
5  let sum = 0;
6  let doubleDigit = false;
7  for (let i = digits.length - 1; i >= 0; i--) {
8    let d = digits[i];
9    if (doubleDigit) {
10      d *= 2;
11      if (d > 9) d -= 9;
12    }
13    sum += d;
14    doubleDigit = !doubleDigit;
15  }
16  return sum % 10 === 0;
17}
18

La protección frente a una entrada vacía es importante: una cadena vacía tiene una suma de dígitos de 0, y 0 es divisible por 10, por lo que, sin esa protección, la función consideraría erróneamente válida cualquier entrada vacía. Para encontrar un dígito de control en lugar de probar uno, ejecuta el mismo bucle sobre los dígitos anteriores al dígito de control, pero empieza a duplicar por el último de ellos y después calcula (10 - sum % 10) % 10.

Preguntas 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.

¿Los números generados son números de tarjeta reales?

No. El generador solo produce cadenas de dígitos que cumplen la comprobación de Luhn. Están destinadas a probar formularios de entrada. Ningún banco las ha emitido y no pueden utilizarse para pagar nada.

¿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.