El número de una tarjeta de crédito consta de 16 dígitos, como por ejemplo vemos en la tarjeta que aparece en la imagen de la derecha. Están separados en grupos de 4 para poder identificarlo mejor, es decir, no es porque cada grupo de 4 dígitos signifique una cosa, sino que la razón eminentemente práctica. Vamos a tomar como ejemplo el número de la imagen:
1234567812345678
El significado de esos 16 números es el siguiente:
- Los cuatro primeros dígitos (1234 en nuestro caso) son el número de identificación de la entidad que nos proporciona la tarjeta, que es diferente según la entidad a la que corresponde (hasta siendo de la misma entidad, dos tarjetas de distintos continentes pueden tener números distintos).
- El siguiente dígito, (5 en la nuestra) indica el tipo de tarjeta y la entidad financiera a la que corresponde (American Express, VISA, …).
- Los diez dígitos posteriores (en nuestro ejemplo, 67812345678) son algo así como el número de identificación del usuario al que pertenece la tarjeta, que lo identifican de forma única.
- El dígito final (8 en la de la imagen) es un dígito de control.
Y en este último punto es donde entras las matemáticas. El dígito de control se calcula a partir de los dígitos anteriores y sirve para confirmar que el número de la tarjeta es un número válido (seguro que a muchos esto os recuerda al post sobre el ISBN). Tengamos en cuenta que hay muchos lugares donde se pueden introducir números de tarjeta, por lo que es interesante que exista un algoritmo para desechar números de tarjeta falsos.
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á basado en la aritmética modular y los pasos a seguir son los siguientes:
De izquierda a derecha, tomamos las cifras que aparecen en las posiciones impares 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. Digamos que esa suma vale .
Sumamos todos los dígitos que aparecen en las posiciones pares del número de la tarjeta (excepto el dígito de control, que es el que no sabemos). Llamemos 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.Vamos a poner un ejemplo, y para ello utilizaremos que aparece en la imagen anterior:
1234567812345678
Colocaremos todos los datos en una tabla y después veremos si la suma final es no es múltiplo de 10
Número de Tarjeta | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
Impares por 2 módulo 9 | 2 | 6 | 1 | 5 | 2 | 6 | 1 | 8 | A=28 | ||||||||
dígitos en posición par | 3 | 4 | 6 | 8 | 2 | 4 | 6 | 8 | B=40 | ||||||||
Suma | 1 | 2 | 6 | 4 | 1 | 6 | 5 | 8 | 1 | 2 | 6 | 4 | 1 | 6 | 5 | 8 | A+B=68 |
Por tanto el número de la tarjeta de la imagen es falso. Podéis probar con vuestras tarjetas de crédito para comprobar que el algoritmo da resultados correctos, esto es, que los números de vuestras tarjetas son totalmente verdaderos..
-
¿Cómo recuperar un dígito perdido de un número de tarjeta?
Como es evidente, este algoritmo puede echarnos una mano en algún momento. Imaginemos que no recordamos un dígito del número de nuestra tarjeta (o que dudamos entre varios, que no lo tenemos claro), querecordamos todos los demás y que sabemos qué posición ocupa el que se nos ha olvidado. Entonces el algoritmo de Luhn nos ayuda a recuperar ese número.
Tomemos como ejemplo el número
3986X29557281742
Supongamos que ese es nuestro número de tarjeta, pero que no recordamos qué dígito es el que corresponde a la posición que ocupa X. Bien, para calcular cuál es ese dígito simplemente planteamos el algoritmo de Luhn fijándonos en si X ocupa una posición par o una impar y recordando que el resultado final debe ser igual a 0 módulo 10. En nuestro caso nos queda:
Por tanto debe cumplirse que 2X + 83 sea un múltiplo de 10. Bueno, no exactamente, ya que hay que recordar que si 2X es mayor o igual que 10 hay que sumar sus cifras.
Bueno, vamos a ver qué valor tiene X. Por un lado, si X < 4, obtenemos que 2X es un número de una cifra, por lo que nos quedaríamos con su valor. Pero en ese caso tendríamos que 2X + 83 es un número impar, por lo que es imposible que sea igual a 0 módulo 10. Por ello, debe ser X >= 4.
Probando ahora con el resto de valores posibles de obtenemos el resultado:
- X = 5: entonces 2X = 10 y el resultado sería 1 + 83 = 84. No.
- X = 6: entonces 2X = 12 y el resultado sería 3 + 83 = 86. No.
- X = 7: entonces 2X = 14 y el resultado sería 5 + 83 = 88. No.
- X = 8: entonces 2X = 16 y el resultado sería 7 + 83 = 90. Si.
- X = 9: entonces 2X = 18 y el resultado sería 9 + 83 = 92. No.
Con esto calculamos el dígito que nos faltaba. Era X = 8 y el número de nuestra tarjeta quedaría así:
398682955728174
Interesante esto de las tarjetas de credito. Todos los dias se aprende algo nuevo siempre lo he dicho.
ResponderEliminarLa explicación está bastante bien pero hay dos fallos:
ResponderEliminarEn el ejemplo que se da, en la rejilla, en la fila de "impares por 2 módulo 9" el 8 debería ser un 5.
El algoritmo tal y como se explica tiene un fallo ya que a los impares no debe aplicárseles el módulo 9 tras multiplicarlos por 2 sino, una vez multiplicados por 2, debemos dejarlos tal cual si son menores de 10 y, si son mayores o iguales a 10 debemos restarles 9.
Esto viene a ser lo mismo que hacer el módulo 9 excepto para el caso del 9x2=18 que nos daría un resultado erróneo si hacemos lo que dice el artículo.
David Pérez