Python随机生成信用卡卡号的实现方法
本文实例讲述了Python随机生成信用卡卡号的实现方法。分享给大家供大家参考。具体分析如下:
这段Python代码根据信用卡卡号产生规则随机生成信用卡卡号,是可以通过验证的,仅供学习参考,请不要用于非法用途,否则后果自负。
#!/usr/bin/python
"""
gencc:Asimpleprogramtogeneratecreditcardnumbersthatpassthe
MOD10check(Luhnformula).
Usefullfortestinge-commercesitesduringdevelopment.
Copyright2003-2012GrahamKing
Thisprogramisfreesoftware;youcanredistributeitand/ormodify
itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby
theFreeSoftwareFoundation;eitherversion2oftheLicense,or
(atyouroption)anylaterversion.
Thisprogramisdistributedinthehopethatitwillbeuseful,
butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe
GNUGeneralPublicLicenseformoredetails.
YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense
alongwiththisprogram;ifnot,writetotheFreeSoftware
Foundation,Inc.,59TemplePlace,Suite330,Boston,MA02111-1307USA
"""
#Differentnamingconvention,becausetranslatedfromPHP
#pylint:disable=C0103
fromrandomimportRandom
importcopy
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']]
defcompleted_number(prefix,length):
"""
'prefix'isthestartoftheCCnumberasastring,anynumberofdigits.
'length'isthelengthoftheCCnumbertogenerate.Typically13or16
"""
ccnumber=prefix
#generatedigits
whilelen(ccnumber)<(length-1):
digit=str(generator.choice(range(0,10)))
ccnumber.append(digit)
#Calculatesum
sum=0
pos=0
reversedCCnumber=[]
reversedCCnumber.extend(ccnumber)
reversedCCnumber.reverse()
whilepos<length-1:
odd=int(reversedCCnumber[pos])*2
ifodd>9:
odd-=9
sum+=odd
ifpos!=(length-2):
sum+=int(reversedCCnumber[pos+1])
pos+=2
#Calculatecheckdigit
checkdigit=((sum/10+1)*10-sum)%10
ccnumber.append(str(checkdigit))
return''.join(ccnumber)
defcredit_card_number(rnd,prefixList,length,howMany):
result=[]
whilelen(result)<howMany:
ccnumber=copy.copy(rnd.choice(prefixList))
result.append(completed_number(ccnumber,length))
returnresult
defoutput(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()#Seedfromcurrenttime
print("darkcodingcreditcardgenerator\n")
mastercard=credit_card_number(generator,mastercardPrefixList,16,10)
print(output("Mastercard",mastercard))
visa16=credit_card_number(generator,visaPrefixList,16,10)
print(output("VISA16digit",visa16))
visa13=credit_card_number(generator,visaPrefixList,13,5)
print(output("VISA13digit",visa13))
amex=credit_card_number(generator,amexPrefixList,15,5)
print(output("AmericanExpress",amex))
#Minorcards
discover=credit_card_number(generator,discoverPrefixList,16,3)
print(output("Discover",discover))
diners=credit_card_number(generator,dinersPrefixList,14,3)
print(output("DinersClub/CarteBlanche",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))
运行结果如下:
darkcodingcreditcardgenerator Mastercard ---------- 5249241445603178 5474662131739768 5581517450441661 5588253309068355 5514774944030079 5122826749528287 5152966434002124 5268127987312292 5385676074198087 5330181839518097 VISA16digit ------------- 4539503803848378 4716973052847436 4556149936260376 4486565514724761 4556309354978160 4486560485591158 4916213564870669 4486704671699934 4532839100193192 4486613519985266 VISA13digit ------------- 4929905559973 4556870828321 4916868200216 4556189916056 4024007171180 AmericanExpress ---------------- 376197656730660 342421777432696 342896016604918 343458311286898 374543958196088 Discover -------- 6011676180456692 6011298953567876 6011699666196053 DinersClub/CarteBlanche --------------------------- 30066643308583 38302315481859 38251784096120 enRoute ------- 214935400146170 201435309964331 201450317314858 JCB --- 3506641780149880 3561856856065701 3508395818816022 Voyager ------- 869984254736122 869938197246102 869921075232782
希望本文所述对大家的Python程序设计有所帮助。