Algoritmo de Luhn


Los números de la tarjeta de crédito/débito

En la actualidad casi todas las actividades comerciales relacionadas con dinero, conllevan el uso de las tarjetas de crédito o débito. El dinero físico cada vez es menos indispensable al realizar transacciones comerciales en nuestra cotidianeidad.

 

Posiblemente te has preguntado cómo se generan los números de las tarjetas y si tienen algún significado. Pues bien, en este artículo analizaremos que significan los números de la tarjeta de crédito o débito y si son  aleatorios o no.

 

El significado de esos 16 números responde a las siguientes condiciones: El primer número de una tarjeta nos indica la organización empresarial a la que pertenece. Aunque las tarjetas generalmente son emitidas por entidades financieras, algunas están respaldadas por otro tipo de empresas. Así, tenemos que:

 

Números 1 y 2. Estos dígitos iniciales indican que las empresas que las respaldan son las Aerolíneas.

Número 3. Corresponde a viajes y entretenimiento (entre ellas, American Express y Diners Club).

Número 4. Este número, como los dos siguientes, están reservadas a entidades financieras. Las tarjetas Visa comienzan con este número.

Número 5. Las tarjetas Master Card comienzan con este dígito.

Número 6. Las tarjetas Discovery Card comienzan con este dígito.

Número 7. Este dígito está reservado a tarjetas que comercializa la industria petrolera.

Número 8. Un dígito inicial 8 nos indica que las entidades emisoras corresponden a la sanidad y las telecomunicaciones.

Número 9. Este dígito está reservado al uso del país en el que opera la tarjeta.

Seis dígitos siguientes, el primer dígito, junto con los seis siguientes conforman el IIN (Issuer Identificacion Number). Este es el número de identificación de la tarjeta, que contiene información sobre el emisor y la zona geográfica de procedencia de la tarjeta. 

 

Números siguientes. Los demás números, excepto el último dígito, se refieren al titular. Es un código propio de la entidad emisora para asociar el cliente a la tarjeta. 

 

Número final. El dígito final corresponde al dígito de control. Aquí es donde entra en juego la matemática y más específicamente la aritmética modular, este número es resultado del algoritmo de Luhn y está relacionado con el resto de los números de la tarjeta, alimentando el algoritmo con todos los números de una tarjeta auténtica, excepto el último, obtendremos como resultado el dígito final de la tarjeta. Esta es la forma de validar que todo sea correcto y evitar usos fraudulentos. 

 

Este dígito de control algunas veces no es solo el último dígito, sino que puede ser que haya dos o tres, razón por la cual algunas tarjetas tienen más de 16 números.

 

Como se dijo antes el algoritmo que se utiliza para calcular el dígito de control de una tarjeta se denomina algoritmo de Luhn, y se debe al informático alemán Hans Peter Luhn. Está fundamentado en aritmética modular y los pasos a seguir son los siguientes:

 

De derecha a izquierda a partir del dígito de control, tomamos las cifras que aparecen en cada segundo dígito y las multiplicamos por 2. Si el número obtenido es menor que 10 nos quedamos con él y si es mayor que 10 sumamos las cifras de ese número y nos quedamos con el resultado (esto es, calculamos el valor del resultado módulo 9).

 

Sumamos todos los resultados obtenidos en el paso anterior. Esa suma es A.

 

Sumamos todos los dígitos que aparecen en las posiciones que no han sido duplicadas (excepto el dígito de control, que es el que no sabemos). Llamemos B a dicha suma.

 

Ahora sumamos los dos resultados anteriores. Tomamos el valor de esta suma y vamos restando 10 hasta obtener un número entre 0 y 9 (es decir, calculamos Suma módulo 10). Entonces el dígito de control (DC) es 10 menos ese número obtenido. Expresado matemáticamente:

Para saber si un número de tarjeta es falso lo que podemos hacer es añadir el último dígito del número (el supuesto dígito de control) a la suma de los dígitos de las posiciones pares. Si el resultado de A+B no es múltiplo de 10 (es decir, si no es igual a 0 módulo 10) entonces el número de la tarjeta es falso.

 

Veamos un ejemplo, y para ello utilizaremos la fórmula que aparece en la imagen anterior:

Supongamos se ha generado la siguiente tarjeta

Colocaremos todos los datos en una tabla y después verificamos si se cumple el algoritmo de Luhn:

Ahora:

Por lo tanto, el número de la tarjeta de la imagen es verdadero. Se podría probar con otras tarjetas de crédito reales para comprobar que el algoritmo da resultados correctos, esto es, que los números de esas tarjetas son totalmente verdaderos.

 

He implementado tres posibles maneras de verificar una tarjeta utilizando el lenguaje de programación C++.

 

En la primera versión leemos el número de tarjeta como un número (del tipo Long Long), por ser leído como un número no admite espacios en blanco.

La segunda versión será leída como cadena de caracteres (admite los espacios en blanco) la que será convertida a un arreglo vectorial de números enteros.

Finalmente, la tercera versión se lee como cadena de caracteres y se trabaja carácter a carácter, convirtiendo cada carácter en el correspondiente número entero para calcular las sumas indicadas en el Algoritmo de Luhn.

Puedes complementar este artículo con el siguiente: Algoritmo-de-luhn