本文實例講述了Python隨機生成信用卡卡號的實現方法。分享給大家供大家參考。具體分析如下:
這段Python代碼根據信用卡卡號產生規則隨機生成信用卡卡號,是可以通過驗證的,僅供學習參考,請不要用於非法用途,否則後果自負。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 #!/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 generatorn") 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))運行結果如下:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16