¿Qué es el Algoritmo de Luhn?
El algoritmo de Luhn es una fórmula de suma de verificación sencilla que valida números de identificación como los de tarjetas de crédito, códigos IMEI y algunos documentos de identidad nacionales. Lo diseñó Hans Peter Luhn en IBM en 1954 y todavía se utiliza hoy como un control rápido de primera línea antes incluso de llamar a una pasarela de pagos.
Qué es el Algoritmo de Luhn
El algoritmo de Luhn —también llamado fórmula de Luhn, algoritmo módulo 10 o mod 10— es una fórmula de suma de verificación que comprueba si una cadena de dígitos parece estructuralmente válida. Lo diseñó Hans Peter Luhn, un informático de IBM, que presentó la patente en 1954. Se adoptó de forma tan amplia que ahora está codificado en la ISO/IEC 7812, el estándar internacional para la numeración de tarjetas de identificación.
El algoritmo no demuestra que un número de tarjeta sea real. No te dice si la tarjeta tiene fondos, si no ha sido robada o si pertenece a la persona que dice usarla. Lo que sí te dice es si el número sigue el patrón matemático que todo número de tarjeta legítimo debe seguir. Si un número falla la comprobación de Luhn, no puede ser un número de tarjeta válido, así que no tiene sentido enviarlo a la pasarela.
Eso hace que Luhn sea un filtro perfecto de primera línea. Es rápido (un puñado de operaciones aritméticas), puede ejecutarse enteramente en el lado del cliente si quieres y atrapa los errores de introducción más comunes antes de que desperdicien una ida y vuelta al procesador.
Cómo funciona el Algoritmo de Luhn
La comprobación de Luhn recorre los dígitos de un número de derecha a izquierda. La receta:
- Empezando por el dígito más a la derecha (el dígito de control), avanza hacia la izquierda
- Cada segundo dígito —el segundo desde la derecha, el cuarto desde la derecha, el sexto desde la derecha, etc.— se duplica
- Si al duplicar un dígito sale un resultado de dos cifras (entre 10 y 18), suma esas dos cifras. Así, 14 se convierte en 1 + 4 = 5. Otra forma de pensarlo: resta 9 a cualquier resultado igual o mayor que 10
- Los demás dígitos —el primero por la derecha, el tercero por la derecha, el quinto por la derecha— se dejan tal cual
- Suma todos los dígitos resultantes
- Si el total es divisible entre 10, el número pasa la comprobación de Luhn. Si no, no es válido
Ejemplo resuelto: 4242 4242 4242 4242
Ejecutemos el algoritmo sobre el número de tarjeta de prueba de Stripe, que todo desarrollador de pagos se sabe de memoria: 4242 4242 4242 4242.
Escribiendo los dígitos de izquierda a derecha y numerando sus posiciones desde la derecha:
Posición (desde la derecha): 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
Dígito: 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2
La posición 1 (la de más a la derecha) es el dígito de control: no la duplicamos. Cada posición par desde la derecha se duplica.
Así que las posiciones que duplicamos son 2, 4, 6, 8, 10, 12, 14, 16, todas ellas con un 4. Duplicar 4 da 8. Lo hacemos ocho veces: 8, 8, 8, 8, 8, 8, 8, 8.
Las posiciones que no duplicamos son 1, 3, 5, 7, 9, 11, 13, 15, todas con un 2. Las dejamos como están: 2, 2, 2, 2, 2, 2, 2, 2.
Ahora sumamos todo:
Dígitos duplicados: 8 × 8 = 64
Dígitos sin duplicar: 2 × 8 = 16
Total: 64 + 16 = 80
80 es divisible entre 10, así que el número pasa. Por eso 4242 4242 4242 4242 es la tarjeta de prueba universal: es el número de 16 dígitos válido por Luhn más simple posible que además empieza por 4, lo que lo marca como un rango BIN de Visa.
Prueba con 4242 4242 4242 4243 y el total queda en 81, que falla. Por eso también la tarjeta de prueba acaba en 2 y no en 3.
Qué identificadores usan Luhn
Los números de tarjeta de crédito y débito de todas las marcas principales —Visa, Mastercard, American Express, Discover, JCB— usan el algoritmo de Luhn. También muchos otros identificadores en los que quizá no pienses como relacionados con pagos:
- Números IMEI El número de serie de 15 dígitos de cualquier móvil pasa una comprobación de Luhn
- Social Insurance Numbers canadienses El SIN de 9 dígitos se valida con Luhn
- Documentos nacionales de identidad israelíes El Teudat Zehut usa Luhn
- Identificadores de IVA griegos Los números AFM usan una variante de Luhn
- Algunos códigos de encuesta y tarjetas de fidelización Allá donde quieras una forma barata de detectar erratas
El patrón es siempre el mismo: una cadena larga de dígitos que los humanos suelen teclear a mano, donde un solo dígito mal es caro y donde prefieres detectar el fallo antes de que los datos lleguen al sistema que les importa.
Qué detecta Luhn y qué no
Luhn es una herramienta para detectar errores accidentales, no fraude deliberado. Es bueno para algunas cosas e inútil para otras.
Detecta cualquier error de un solo dígito. Si tecleas un dígito mal —un 5 en lugar de un 6, por ejemplo—, la suma quedará descuadrada y la comprobación fallará. También detecta casi todas las transposiciones adyacentes, es decir, intercambiar dos dígitos contiguos (teclear 23 en lugar de 32). La única transposición que se le escapa es intercambiar 0 y 9, que es un punto ciego conocido.
Lo que no detecta es la manipulación aleatoria. Si un atacante está generando números a voluntad, puede producir trivialmente cadenas que pasen la comprobación de Luhn. El algoritmo solo reduce el espacio de números de tarjeta válidos en un factor de 10: aproximadamente el 10 por ciento de todas las cadenas posibles de 16 dígitos pasan Luhn. Eso ayuda a filtrar bots que lanzan números aleatorios, pero no es una medida de seguridad en sentido criptográfico.
Tampoco detecta números estructuralmente válidos que pertenecen a tarjetas inexistentes, cuentas cerradas o al titular equivocado. Para eso necesitas la pasarela, el emisor y normalmente 3D Secure por encima.
Por qué los sistemas de pago siguen usando Luhn
Si Luhn no detiene el fraude, podrías preguntarte por qué sigue estando integrado en cada formulario de pago. La respuesta es velocidad y coste.
Llamar a una pasarela para validar un número de tarjeta requiere idas y vueltas de red, consume cuota de API y a veces lleva un coste por petición. Hacer una comprobación de Luhn tarda microsegundos y es gratis. Si alguien teclea su número de tarjeta y un solo dígito está mal, la comprobación de Luhn lo detecta al instante: el formulario puede mostrar un mensaje de error y el usuario corregir la errata antes incluso de haber pulsado Pagar. No tiene sentido enviar una errata obvia a la pasarela y dejar que queme un intento de autorización.
Luhn también ayuda en lo alto del embudo, antes de cualquier validación real. Cuando un sitio de e-commerce hace una comprobación rápida del número de tarjeta a medida que se teclea, el feedback es inmediato. El usuario no tiene que esperar una respuesta de «tarjeta no válida» tres segundos después de pulsar enviar.
Para más detalles sobre cómo encaja toda la cadena de validación —Luhn, búsqueda de BIN, autorización del emisor, 3D Secure, tokenización y todo lo demás—, nuestra guía completa de validación de pagos recorre toda la cadena.
Luhn y PCI DSS
Ejecutar una comprobación de Luhn sobre un número de tarjeta no te mete por sí mismo en el alcance de PCI DSS: es solo aritmética sobre dígitos que ya te han dado. Pero en cuanto almacenas ese número, lo transmites o lo muestras, te cae encima todo el peso de PCI DSS. Si tienes la tentación de «solo validarlo en el cliente y enviarlo», para y piensa dónde están viviendo esos dígitos y quién puede verlos. La mayoría de los flujos de pago modernos usan campos alojados o una capa de tokenización para que el PAN nunca toque tu servidor.
El flujo de pago de Paytia ejecuta una comprobación de Luhn sobre cada número de tarjeta antes de que llegue a la pasarela. Importa porque nuestros clientes cobran en tiempo real con un agente en la línea: si el número tiene una errata, queremos detectarla en el mismo instante en lugar de esperar a que la pasarela lo rechace y obligar al cliente a empezar de nuevo. Es un detalle pequeño, pero mantiene los flujos de pago telefónico ajustados.
También usamos Luhn como uno de los controles en capas que conviven con nuestra plataforma PCI DSS Nivel 1. El número de tarjeta pasa la comprobación de Luhn y luego nuestros socios de pasarela lo tokenizan, de modo que el PAN en claro nunca toca los sistemas del comercio. Para más sobre cómo funciona la cadena completa de validación, mira nuestra guía de validación de pagos.
Preguntas frecuentes
¿Quién inventó el algoritmo de Luhn?
Hans Peter Luhn, informático de IBM, diseñó el algoritmo en 1954. Presentó la patente estadounidense ese año, y el algoritmo se codificó después en el estándar ISO/IEC 7812 para la numeración de tarjetas de identificación.
¿Pasar la comprobación de Luhn significa que la tarjeta es real?
No. La comprobación de Luhn solo confirma que un número sigue el patrón matemático correcto. No te dice si la tarjeta existe, tiene fondos o pertenece a quien la usa. Para eso necesitas que la pasarela y el emisor autoricen la transacción.
¿Por qué se usa 4242 4242 4242 4242 como tarjeta de prueba?
Es el número de 16 dígitos válido por Luhn más simple posible que empieza por 4, lo que lo sitúa en el rango BIN de Visa. Stripe y la mayoría de los procesadores lo tratan como tarjeta de prueba universal en entornos sandbox porque pasa todas las comprobaciones estructurales sin pertenecer a una cuenta real.
¿Cuál es la diferencia entre Luhn y un CRC o un hash?
Un CRC o un hash criptográfico están diseñados para detectar cualquier manipulación con una precisión mucho mayor, pero los cálculos son más pesados. Luhn es deliberadamente lo bastante simple como para hacerse de cabeza, que es para lo que originalmente se diseñó: la verificación manual de números de tarjeta. Detecta erratas de un solo dígito y la mayoría de las inversiones adyacentes, que es exactamente lo que un formulario de pago necesita.
Ready to take secure payments?
Book a demo with our team. We'll show you DTMF masking live, talk through PCI DSS scope reduction, and put together pricing based on your call volume.
Trusted by law firms, insurers, healthcare providers and regulated businesses worldwide. Learn more about Paytia