Ese código tiene un problema: que genera más números de los que son necesarios. Quiero decir que estás eligiendo números al azar, y luego compruebas si son válidos o no. Si no lo son, lo vuelves a intentar con otro número.
Es mejor lo que hemos dicho antes: generar los primeros dígitos y luego el módulo nos extrae el último número de control (que es lo que realmente hace el programa en Python):
Using perl Syntax Highlighting
#!usr/bin/perl
use Algorithm::LUHN qw/check_digit/;
for (1..100) {
my $numero = join '', map { int rand 10 } 1 .. 15; # generamos uno menos del largo
my $check = check_digit($numero); # dígito de control
print "[+] $numero$check\n"; # salida directa del resultado
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
El saber a qué empresa pertenece, pues según la norma
ISO/IEC 7812, los primeros dígitos están reservados para indicar a qué entidad se refiere el número. En el programa en Python verás que se crea un prefijo distinto según el tipo de tarjeta que queramos crear. Por ejemplo, en Visa, se elige uno de entre 8 dígitos posibles , mientras que en Amex, se elige entre dos combinaciones: '34' o '37'.