ccs
Closed this issue · 0 comments
#!/usr/bin/env python
#-- coding: iso-8859-1 --
import getopt
import time
import os
import sys
import datetime
from random import randint
#Arg parser
def parseOptions(argv):
bin_format = ""
saveopt = False
limit = 10
ccv = False
date = False
check = False
try:
opts, args = getopt.getopt(argv, "h:b:u:gcd",["help", "bin", "guardar", "cantidad", "ccv", "date"])
for opt, arg in opts:
if opt in ("-h"):
usage()
sys.exit()
elif opt in ("-b", "-bin"):
bin_format = arg
elif opt in ("-g", "-guardar"):
saveopt = True
elif opt in ("-u", "-cantidad"):
limit = arg
elif opt in ("-c", "-ccv"):
ccv = True
elif opt in ("-d", "-date"):
date = True
return(bin_format, saveopt, limit, ccv, date)
except getopt.GetoptError:
usage()
sys.exit(2)
#CHECKER BASADO EN ALGORITMO LUHN
def cardLuhnChecksumIsValid(card_number):
""" checks to make sure that the card passes a luhn mod-10 checksum """
sum = 0
num_digits = len(card_number)
oddeven = num_digits & 1
for count in range(0, num_digits):
digit = int(card_number[count])
if not (( count & 1 ) ^ oddeven ):
digit = digit * 2
if digit > 9:
digit = digit - 9
sum = sum + digit
return ( (sum % 10) == 0 )
#GENERA UNA BASE DE BIN XXXXXXXXXXXXXXXX
def ccgen(bin_format):
out_cc = ""
if len(bin_format) == 16:
#Iteration over the bin
for i in range(15):
if bin_format[i] in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"):
out_cc = out_cc + bin_format[i]
continue
elif bin_format[i] in ("x"):
out_cc = out_cc + str(randint(0,9))
else:
print("\nCaracter no valido en el formato: {}\n".format(bin_format))
print("El formato del bin es: xxxxxxxxxxxxxxxx de 16 digitos\n")
print("Ayuda: python2 cc-genpro.py -h \n")
sys.exit()
#Generate checksum (last digit) -- IMPLICIT CHECK
for i in range(10):
checksum_check = out_cc
checksum_check = checksum_check + str(i)
if cardLuhnChecksumIsValid(checksum_check):
out_cc = checksum_check
break
else:
checksum_check = out_cc
else:
print("\033[1;32m")
print("\nERROR: Inserta un bin valido\n")
print("SOLUCION: El formato del bin es: xxxxxxxxxxxxxxxx de 16 digitos\n")
print("AYUDA: python2 .ccs-validas.py -h\n")
sys.exit()
return(out_cc)
#Write on a file that takes a list for the argument
def save(generated):
now = datetime.datetime.now()
file_name = "cc-gen_output_{0}.txt".format(str(now.day) + str(now.hour) + str(now.minute) + str(now.second))
f = open(file_name, 'w')
for line in generated:
f.write(line + "\n")
f.close
#Random ccv gen
print("\033[1;31m")
def ccvgen():
ccv = ""
num = randint(10,999)
if num < 100:
ccv = "0" + str(num)
else:
ccv = str(num)
return(ccv)
#Random exp date
print("\033[1;31m")
def dategen():
now = datetime.datetime.now()
date = ""
month = str(randint(1, 12))
current_year = str(now.year)
year = str(randint(int(current_year[-2:]) + 1, int(current_year[-2:]) + 6))
date = month + "|" + year
return date
#The main function
print("\033[1;32m")
def main(argv):
bin_list = []
#get arg data
(bin_format, saveopt, limit, ccv, date) = parseOptions(argv)
if bin_format is not "":
for i in range(int(limit)):
if ccv and date:
bin_list.append(ccgen(bin_format) + "|" + ccvgen() + "|" + dategen())
print(bin_list[i])
elif ccv and not date:
bin_list.append(ccgen(bin_format) + "|" + ccvgen())
print(bin_list[i])
elif date and not ccv:
bin_list.append(ccgen(bin_format) + "|" + dategen())
print(bin_list[i])
elif not date and not ccv:
bin_list.append(ccgen(bin_format))
print(bin_list[i])
if not bin_list:
print("\nERROR: el bin que insertaste no es valido\n")
else:
print("\033[1;34m\n Todas las tarjetas fueron validadas(check)")
print("\n Pueden ser usadas satisfactoriamente")
if saveopt:
save(bin_list)
else:
usage()
sys.exit()
if name == 'main':
main(sys.argv[1:])