本文实例讲述了Python随机生成信用卡卡号的实现方法。分享给大家供大家参考。具体分析如下:
这段Python代码根据信用卡卡号产生规则随机生成信用卡卡号,是可以通过验证的,仅供学习参考,请不要用于非法用途,否则后果自负。
#!/usr/bin/python \"\"\" gencc: A simple program to generate credit card numbers that pass the MOD 10 check (Luhn formula). Usefull for testing e-commerce sites during development. Copyright 2003-2012 Graham King This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA \"\"\" # Different naming convention, because translated from PHP # pylint: disable=C0103 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 = ((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 ---------- 5249241445603178 5474662131739768 5581517450441661 5588253309068355 5514774944030079 5122826749528287 5152966434002124 5268127987312292 5385676074198087 5330181839518097 VISA 16 digit ------------- 4539503803848378 4716973052847436 4556149936260376 4486565514724761 4556309354978160 4486560485591158 4916213564870669 4486704671699934 4532839100193192 4486613519985266 VISA 13 digit ------------- 4929905559973 4556870828321 4916868200216 4556189916056 4024007171180 American Express ---------------- 376197656730660 342421777432696 342896016604918 343458311286898 374543958196088 Discover -------- 6011676180456692 6011298953567876 6011699666196053 Diners Club / Carte Blanche --------------------------- 30066643308583 38302315481859 38251784096120 enRoute ------- 214935400146170 201435309964331 201450317314858 JCB --- 3506641780149880 3561856856065701 3508395818816022 Voyager ------- 869984254736122 869938197246102 869921075232782
希望本文所述对大家的Python程序设计有所帮助。