Cómo el Algoritmo de Luhn Valida un Número de Tarjeta de Crédito
El algoritmo de Luhn es la fórmula de checksum que usan Visa, Mastercard y el resto de las marcas para comprobar, en una fracción de segundo, si un número de tarjeta está bien formado. Duplica ciertos dígitos, suma todo y exige que el resultado sea múltiplo de 10. Si no lo es, el número tiene un error de tecleo y el pago ni siquiera necesita llegar al banco para saberlo.
La regla, explicada sin rodeos
Empieza por el dígito más a la derecha y avanza hacia la izquierda. Duplica uno de cada dos dígitos (el segundo, el cuarto, el sexto, y así sucesivamente). Si al duplicar un dígito el resultado tiene dos cifras, réstale 9 (es lo mismo que sumar sus dos cifras entre sí: 8×2=16, y 16-9=7). Suma todos los dígitos, tanto los que duplicaste como los que dejaste intactos. Si el total termina en 0, el número pasa la comprobación.
Es una fórmula ideada en 1954 por el ingeniero de IBM Hans Peter Luhn, y su gracia está en que cada marca calcula el último dígito de sus números precisamente para que el total dé múltiplo de 10. Por eso casi cualquier error accidental al copiar o teclear un número rompe la cuenta.
Ejemplo real: validando 4111 1111 1111 1111 paso a paso
Vamos a aplicar la regla al número de prueba más citado en la documentación de pasarelas de pago como Stripe o PayPal: 4111 1111 1111 1111. Tiene 16 dígitos, así que el dígito más a la izquierda (posición 16 contando desde la derecha) también cae en una posición par y se duplica.
En este número solo hay dos valores posibles: el 4 inicial y quince 1. Agrupando los dígitos por el papel que juegan en la fórmula:
| Grupo de dígitos | Cuántos hay | Cómo se procesan | Aporte a la suma |
|---|---|---|---|
El 4 inicial (posición 16, par) | 1 dígito | Se duplica: 4×2=8 | 8 |
Los 1 en posiciones pares (2, 4, 6, 8, 10, 12, 14) | 7 dígitos | Se duplican: 1×2=2 cada uno | 14 |
Los 1 en posiciones impares (1, 3, 5, 7, 9, 11, 13, 15) | 8 dígitos | Se dejan tal cual | 8 |
| Total | 16 dígitos | 30 |
30 es múltiplo de 10, así que el número pasa el checksum de Luhn. Coincide con la realidad: 4111111111111111 es un número de prueba válido de Visa, publicado precisamente para que cualquiera pueda usarlo en un entorno de pruebas sin tocar una tarjeta real.
Por qué un solo error de tecleo hace fallar la comprobación
Ahora cambiemos un solo carácter: el último dígito pasa de 1 a 2, así que el número queda 4111 1111 1111 1112. Ese último dígito ocupa la posición 1 (impar), así que no se duplica y entra en la suma con su valor tal cual.
En el número original ese dígito aportaba 1 a la suma total de 30. Con el cambio, ahora aporta 2, así que el nuevo total es 30 − 1 + 2 = 31. Y 31 no es múltiplo de 10: el checksum falla de inmediato.
Es exactamente el escenario típico de un error de dedo al copiar un número largo a mano, un dígito final que cambia por otro cercano. Luhn lo atrapa sin necesidad de contactar ningún banco ni esperar una respuesta de red: la comprobación es puramente aritmética y se resuelve al instante, en el propio formulario.
Números de prueba habituales por marca
Estos números son públicos, se usan en toda la industria del desarrollo de pagos (aparecen en la documentación oficial de Stripe, PayPal y otras pasarelas) y son seguros de compartir porque no corresponden a ninguna cuenta real:
| Marca | Número de prueba |
|---|---|
| Visa | 4111 1111 1111 1111 |
| Visa (alternativo) | 4012 8888 8888 1881 |
| Mastercard | 5555 5555 5555 4444 |
| American Express | 3782 822463 10005 |
| Discover | 6011 1111 1111 1117 |
Nota que American Express usa 15 dígitos en lugar de 16, y por eso su número se agrupa distinto (4-6-5 en vez de 4-4-4-4). El algoritmo de Luhn no depende de la longitud del número: funciona igual sea cual sea la cantidad de dígitos, siempre contando desde el dígito más a la derecha hacia la izquierda.
Pruébalo con tu propio número
Pega cualquiera de los números de la tabla anterior, o cualquier otro, y mira el checksum de Luhn y la marca detectada al instante. Todo se calcula en tu navegador; ningún número se envía a ningún servidor.
Lo que Luhn no te dice
Que un número pase el checksum de Luhn solo confirma que está bien formado matemáticamente y que coincide con el patrón de longitud y prefijo de una marca conocida. No confirma que la tarjeta exista, que esté activa, que tenga fondos disponibles ni que pertenezca a nadie en particular. Esa comprobación solo la puede hacer el banco emisor en el momento de procesar el cobro.
Para quien construye o prueba un formulario de checkout, esa distinción es justo lo que necesita: si un número de prueba como 4111111111111111 pasa el checksum de Luhn y tu formulario aun así lo rechaza, el error está en tu código, no en el número. Y si alguien escribe su propio número de tarjeta y falla la comprobación antes de enviar el formulario, acaba de evitar un intento de pago fallido y una vuelta atrás en el proceso de compra.
Errores comunes y casos límite
Asumir que Luhn detecta cualquier error posible. No es así. Detecta la inmensa mayoría de los errores de un solo dígito y la mayoría de las transposiciones de dígitos adyacentes, pero tiene un punto ciego conocido: intercambiar dos dígitos adyacentes cuya diferencia sea exactamente 9 (en la práctica, un 0 y un 9 contiguos que cambian de lugar) produce la misma suma total y pasa la verificación sin que nadie lo note. Es un caso raro en la práctica, pero vale la pena conocerlo antes de tratar a Luhn como una garantía absoluta.
Confundir “válido según Luhn” con “tarjeta real”. Son cosas distintas, como se explicó arriba. Un generador de números aleatorios que respete la fórmula puede producir números que pasan el checksum sin corresponder a ninguna cuenta, y eso es justamente lo que hacen los números de prueba de las pasarelas de pago.
Olvidar el prefijo y la longitud de la marca. Pasar el checksum de Luhn no basta para que un número sea aceptado como válido en un contexto real: también tiene que empezar con el prefijo correcto de su marca (4 para Visa, 51-55 para Mastercard, 34 o 37 para American Express) y tener la longitud exacta que esa marca usa. Un número puede sumar múltiplo de 10 y aun así no corresponder a ninguna marca reconocida.
Pegar un número de tarjeta real en cualquier herramienta web por costumbre. Aunque una validación corra por completo en el navegador sin enviar nada a ningún servidor, como hábito conviene usar siempre uno de los números de prueba públicos para probar formularios, y reservar el número real solo para el formulario de pago legítimo en el que realmente se va a usar.
Preguntas frecuentes
¿El algoritmo de Luhn puede confirmar que una tarjeta tiene saldo? No. Solo verifica que el número esté matemáticamente bien formado y coincida con el patrón de una marca conocida. Si la tarjeta existe, está activa o tiene fondos disponibles es algo que únicamente puede confirmar el banco emisor al procesar el cobro.
¿Por qué las tarjetas de prueba como 4111111111111111 son seguras de compartir en público? Porque no están vinculadas a ninguna cuenta real. Las pasarelas de pago las publican precisamente para que desarrolladores y equipos de QA puedan probar formularios de checkout sin arriesgar dinero ni datos reales, y aparecen así en la documentación oficial de Stripe, PayPal y otros procesadores.
¿Todas las tarjetas del mundo usan el algoritmo de Luhn? La inmensa mayoría de las tarjetas de crédito y débito emitidas por Visa, Mastercard, American Express, Discover y las principales marcas internacionales lo usan, junto con otros identificadores numéricos como el IMEI de los teléfonos. No es un estándar universal para todo número de tarjeta que exista en el mundo, pero sí es la norma en el sistema de pagos que la mayoría de la gente usa a diario.
¿Qué pasa si mi formulario de pago rechaza un número que pasa el checksum de Luhn? Si el checksum es válido y el formulario aun así lo rechaza, el problema casi siempre está en la lógica de validación del formulario (una expresión regular demasiado estricta, un límite de longitud mal puesto) o en una restricción del propio comercio (por ejemplo, no aceptar cierta marca), no en el número en sí.