import random

def luhn_checksum(card_number):
    digits = [int(d) for d in str(card_number)]
    odd_digits = digits[-1::-2]
    even_digits = digits[-2::-2]
    checksum = sum(odd_digits)
    for d in even_digits:
        checksum += sum(divmod(d*2, 10))
    return checksum % 10

def generate_luhn_valid(prefix, length):
    number = prefix
    while len(number) < (length - 1):
        number += str(random.randint(0,9))
    for check in range(10):
        candidate = number + str(check)
        if luhn_checksum(candidate) == 0:
            return candidate
    return None

random.seed(42)
visa = generate_luhn_valid("4539", 16)
mc = generate_luhn_valid("5412", 16)
amex = generate_luhn_valid("3714", 15)
disc = generate_luhn_valid("6011", 16)

print("Visa:", visa)
print("MC:", mc)
print("Amex:", amex)
print("Discover:", disc)

def aba_checksum_valid(r):
    d = [int(x) for x in r]
    total = (3*(d[0]+d[3]+d[6]) + 7*(d[1]+d[4]+d[7]) + 1*(d[2]+d[5]+d[8]))
    return total % 10 == 0

def generate_aba(prefix):
    for last in range(10):
        candidate = prefix + str(last)
        if len(candidate)==9 and aba_checksum_valid(candidate):
            return candidate
    return None

routing1 = generate_aba("07100244")
routing2 = generate_aba("02100017")
print("Routing1:", routing1)
print("Routing2:", routing2)
