示例#1
0
def generate_subject_id(prefix=settings.SUBJECT_LUHN_PREFIX,
                        number_1="",
                        number_2=""):
    if not number_1 or len(number_1) != 10:
        number_1 = random_number(10)
    if not number_2 or len(number_2) != 4:
        number_2 = random_number(4)
    number = "%s%s" % (number_1, number_2)
    prefixed_number = "%s%s" % (prefix, number)
    luhn_checksum = generate(prefixed_number)
    return "%s%s" % (number, luhn_checksum)
示例#2
0
def create_account():
    root_iin_num = "400000"
    customer_num = str(random.randint(99999999, 999999999))
    checksum_digit = luhn.generate(root_iin_num + customer_num)
    account_num = root_iin_num + customer_num + str(checksum_digit)  # generates account number
    sql_select_query = """select * from card where id = ?"""
    cur.execute(sql_select_query, (account_num,))
    result = cur.fetchone()
    if result:
        create_account()
    else:
        pin = str(random.randint(999, 9999))
        cur.execute("INSERT INTO card (number, pin) VALUES(?, ?)", (account_num, pin))
    conn.commit()
    print("Your card has been created\nYour card number:", account_num, "\nYour card PIN:")
    print(pin)  # select pin from cards dbase
示例#3
0
def generate_subject_id(prefix=settings.SUBJECT_LUHN_PREFIX,
                        starts_with="1",
                        number_str_include=""):
    # Generate a subject according to https://github.com/TransparentHealth/uhi
    # Supply up to 10 numbers you want in the resulting number.
    max_allowed_pickable_nums = 10
    size_of_between_number = 13
    if not number_str_include.isnumeric():
        number_str_include = ""
    # numbers can be any length from 0 - 13
    len_numbers = len(number_str_include)
    if len_numbers > max_allowed_pickable_nums:
        number_str_include = number_str_include[0:max_allowed_pickable_nums]
    remaining = size_of_between_number - len(number_str_include)
    padding = random_number(remaining)
    number = "%s%s%s" % (starts_with, number_str_include, padding)
    prefixed_number = "%s%s" % (prefix, number)
    luhn_checksum = generate(prefixed_number)
    return "%s%s" % (number, luhn_checksum)
示例#4
0
def generate_reference():
    """
    Return a luhn-valid 10-digit reference like:
    123-456  (where 6 is the check digit)
    """
    from . import WriterReaderAllocation

    characters = '0123456789'

    for attempt in range(10):
        five_digits = ''.join(random.choice(characters) for _ in range(5))
        reference = '{}-{}{}'.format(
            five_digits[0:3],
            five_digits[3:5],
            luhn.generate(five_digits))

        try:
            WriterReaderAllocation.objects.get(reference=reference)
        except WriterReaderAllocation.DoesNotExist:
            return reference

    raise RuntimeError('Failed repeatedly to generate a unique reference.')
# create directory for salt
if not os.path.exists(wd+'/salt'):
    os.makedirs(wd+'/salt') 
# store salt for reproducability
text_file = open(wd+'\salt\\'+'salt'+salt[:5]+'.txt','w+')
text_file.write(salt)
text_file.close()

# STEP 3: add prefix
# define 2 digit prefix for id - should evaluate if len is 2
prefix = input('Define a 1 digit prefix number for id ')
idbase['hashedid11'] = str(prefix) + idbase['hashedid9']

# STEP 4
# generate the luhn check digit in new column for visability (will be dropped)
idbase['luhn1'] = idbase['hashedid11'].apply(lambda x: luhn.generate(x))
 # append the check digit
idbase['hashedid12'] = idbase['hashedid11'].apply(lambda x: luhn.append(x))
# test verify
idbase['luhnvalid'] = idbase['hashedid12'].apply(lambda x: luhn.verify(x))
# check if any invalid numbers
if idbase.luhnvalid.all() == True:
    print('no issue with check digits')
elif idbase.luhnvalid.all() == False:
    sys.exit('STOP - issue with luhn check digit')
    
# STEP 5: cleanup and strip down
# rename new id column
idcolname = input('specify column name for new ID... ')
idbase.rename(columns={'hashedid12':idcolname},inplace=True)
# strip down file
示例#6
0
文件: test.py 项目: mmcloughlin/luhn
def test_generate():
    assert luhn.generate('7992739871') == 3
示例#7
0
def test_generate():
    assert luhn.generate('7992739871') == 3