Python随机生成信用卡卡号代码

2022-03-11 00:00:00 生成 卡号 信用卡

这段Python代码根据信用卡卡号产生规则随机生成信用卡卡号,是可以通过验证的,仅供学习参考,请不要用于非法用途。

"""
皮蛋编程(https://www.pidancode.com)
创建日期:2022/3/28
功能描述:Python随机生成信用卡卡号代码
"""


from random import Random
import copy

visaPrefixList = [
    ['4', '5', '3', '9'],
    ['4', '5', '5', '6'],
    ['4', '9', '1', '6'],
    ['4', '5', '3', '2'],
    ['4', '9', '2', '9'],
    ['4', '0', '2', '4', '0', '0', '7', '1'],
    ['4', '4', '8', '6'],
    ['4', '7', '1', '6'],
    ['4']]
mastercardPrefixList = [
    ['5', '1'], ['5', '2'], ['5', '3'], ['5', '4'], ['5', '5']]
amexPrefixList = [['3', '4'], ['3', '7']]
discoverPrefixList = [['6', '0', '1', '1']]
dinersPrefixList = [
    ['3', '0', '0'],
    ['3', '0', '1'],
    ['3', '0', '2'],
    ['3', '0', '3'],
    ['3', '6'],
    ['3', '8']]
enRoutePrefixList = [['2', '0', '1', '4'], ['2', '1', '4', '9']]
jcbPrefixList = [['3', '5']]
voyagerPrefixList = [['8', '6', '9', '9']]


def completed_number(prefix, length):
    """
    'prefix' is the start of the CC number as a string, any number of digits.
    'length' is the length of the CC number to generate. Typically 13 or 16
    """
    ccnumber = prefix
    # generate digits
    while len(ccnumber) < (length - 1):
        digit = str(generator.choice(range(0, 10)))
        ccnumber.append(digit)
    # Calculate sum
    sum = 0
    pos = 0
    reversedCCnumber = []
    reversedCCnumber.extend(ccnumber)
    reversedCCnumber.reverse()
    while pos < length - 1:
        odd = int(reversedCCnumber[pos]) * 2
        if odd > 9:
            odd -= 9
        sum += odd
        if pos != (length - 2):
            sum += int(reversedCCnumber[pos + 1])
        pos += 2
    # Calculate check digit
    checkdigit = int(((sum / 10 + 1) * 10 - sum) % 10)
    ccnumber.append(str(checkdigit))
    return ''.join(ccnumber)


def credit_card_number(rnd, prefixList, length, howMany):
    result = []
    while len(result) < howMany:
        ccnumber = copy.copy(rnd.choice(prefixList))
        result.append(completed_number(ccnumber, length))
    return result


def output(title, numbers):
    result = []
    result.append(title)
    result.append('-' * len(title))
    result.append('\n'.join(numbers))
    result.append('')
    return '\n'.join(result)


#
# Main
#
generator = Random()
generator.seed()  # Seed from current time
print("darkcoding credit card generator\n")
mastercard = credit_card_number(generator, mastercardPrefixList, 16, 10)
print(output("Mastercard", mastercard))
visa16 = credit_card_number(generator, visaPrefixList, 16, 10)
print(output("VISA 16 digit", visa16))
visa13 = credit_card_number(generator, visaPrefixList, 13, 5)
print(output("VISA 13 digit", visa13))
amex = credit_card_number(generator, amexPrefixList, 15, 5)
print(output("American Express", amex))
# Minor cards
discover = credit_card_number(generator, discoverPrefixList, 16, 3)
print(output("Discover", discover))
diners = credit_card_number(generator, dinersPrefixList, 14, 3)
print(output("Diners Club / Carte Blanche", diners))
enRoute = credit_card_number(generator, enRoutePrefixList, 15, 3)
print(output("enRoute", enRoute))
jcb = credit_card_number(generator, jcbPrefixList, 16, 3)
print(output("JCB", jcb))
voyager = credit_card_number(generator, voyagerPrefixList, 15, 3)
print(output("Voyager", voyager))

输出结果如下:

darkcoding credit card generator
Mastercard
----------
5414776099395160
5361313694840170
5145774384378020
5448719998187530
5325734298341960
5454105150483380
5426189936830740
5421736117064890
5350016982233080
5201201815280420

VISA 16 digit
-------------
4929896480469590
4716516847978410
4916974409261390
4121498414385160
4929390048485560
4929456095462570
4716227162406180
4539885036183800
4929025657226540
4486244270565200

VISA 13 digit
-------------
4486797756930
4024007151320
4532330685390
4682109821040
4532973166110

American Express
----------------
374357637124870
347571943273200
343017736486740
349531637436060
343121889988960

Discover
--------
6011741347300880
6011266102840680
6011219422610290

Diners Club / Carte Blanche
---------------------------
30054521517500
38594065598110
30037576652500

enRoute
-------
201457049826080
201487622825290
201475390854820

JCB
---
3562287733637440
3549267760113100
3542344701963090

Voyager
-------
869907150750170
869983691949320
869951427028720

以上代码在python3.9环境下测试通过,代码生成的信用卡卡号是根据信用卡编号规则生成,仅供学习代码使用。

相关文章