Hoy os dejo la aplicación en la que he estado trabajando los tiempos muertos de este fin de semana. Se trata de un pequeño script en Python que genera números de tarjeta de crédito validadas. El caso es que, al igual que ocurre con las letras de los DNI, existe un algoritmo que verifica que los números facilitados corresponden de verdad a una tarjeta de crédito real. Esto podría ser útil para, en aquellos sistemas que exijan a sus usuarios como parte del proceso de registro la inserción de una tarjeta de crédito válida, introducir un número generado artificialmente que satisfaga las restricciones de los números reales. Para evitar fraudes de este tipo lo que hacen algunos sistemas es realizar un cargo de 0,01€ a la cuenta y devolverlo posteriormente, pero puedo asegurar que existen muchos otros que no realizan esta sencilla comprobación adicional.

De cualquier manera y para el que tenga curiosidad, el script, colgado aquí en mi cuenta de Pastebin, implementa ese proceso que comentamos, que os podéis encontrar haciendo un par de búsquedas en Google sobre el tema (aquí o aquí por ejemplo) y cuyo funcionamiento podemos resumir con el siguiente ejemplo.

Dado un número 1234-5678-9012-3456, el algoritmo de verificación de los números de tarjeta funciona así:

  • Se multiplican por dos las cifras impares del número, y si en caso de que el número resultante sea >9, se le restará 9.

2264-1658-9024-6416

  • Se suman los valores de todas las cifras

2+2+6+4+1+6+5+8+9+0+2+4+6+4+1+6=66

  • Se comprueba si la suma obtenida es divisible por 10 y <=150, que en este caso no lo es.

La aplicación está pensada para ser ejecutada desde la consola y tiene las siguientes opciones:

febre@felix-portatil:~$ python numtarcre_gen.py -h
usage: NTC_GEN.py [-h] [-g CANT_NUM | -c NUM_TAR] [-i ID_CIA] [-f FICH_I/O]
[-q] [-s CARAC] [-v] [--version]
Generador y verificador de la validez de números de tarjeta de crédito.
optional arguments:
-h, --help            show this help message and exit
-g CANT_NUM, --generador CANT_NUM
para indicar el total de números de tarjeta a
generar.
-c NUM_TAR, --comprobante NUM_TAR
para especificar: a) el número de tarjeta individual
a verificar (admite como carácter separador el guión
(-)) o b), si existe fichero de entrada, la
verificación del fichero de entrada
-i ID_CIA, --inicio ID_CIA
para establecer el número (o números) iniciales de
las tarjetas a generar (3xx..x - American Express,
4xx..x - Visa, 5xx..x - MasterCard, 6xx..x -
Discover).
-f FICH_I/O, --fichero FICH_I/O
para determinar el nombre del fichero de
entrada/salida.
-q, --quiet           para no mostrar ninguna salida en la consola.
-s CARAC, --separador CARAC
para indicar un carácter de separación diferente a
'-'.
-v, --verbose         para mostrar detalles de ejecución en pantalla.
--version             show program's version number and exit

Las opciones básicamente incluyen la posibilidad de verificar números de tarjeta pasados por parámetro (o en un fichero de texto plano indicado con la opción -f <nombre_fichero> y que contenga un número en cada línea) y la posibilidad de generar n números de tarjeta aleatorios diferentes y volcarlos o no a un fichero dado. Observad que las secuencias numéricas generadas no son consecutivas sino aleatorias, lo que, para cantidades enormes de números, podría introducir problemas de rendimiento si se generan cifras correspondientes a números ya verificados. De cualquier manera, en las pruebas que he realizado en un i3, en apenas dos minutos ha conseguido generar 100.000 así que no debería ser mucho problema.

Una cosa interesante implementada es que con la opción -i se le puedan indicar también los caracteres con los que se quiere que comiencen los números generados. Esto permitiría que alguien que estuviera interesado en solamente generar números correspondientes a tarjetas, Visa, American Express, etc. o a entidades financieras concretas pudiera hacerlo si se conocen los dígitos que las identifican. Os animo a realizar  modificaciones y/o optimizaciones de este script y a, de hacerlo, no dudar en poneros en contacto conmigo de nuevo para volverle a dar salida desde aquí. ;)

IMPORTANTE. También quiero aprovechar desde aquí para insistir nuevamente en lo que se detalla después de la licencia y al inicio del código: ya que este programa ha sido codificado con fines única y exclusivamente educativos, el uso con fines fraudulentos de este script es responsabilidad única y última de sus usuarios finales por lo que insto desde aquí a cualquier persona que detecte un uso delictivo del mismo a ponerlo en conocimiento de las autoridades pertinentes.

Bookmark and Share