当前位置:Gxlcms > Python > Python随机生成信用卡卡号的实现方法

Python随机生成信用卡卡号的实现方法

时间:2021-07-01 10:21:17 帮助过:22人阅读

本文实例讲述了Python随机生成信用卡卡号的实现方法。分享给大家供大家参考。具体分析如下:

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

  1. #!/usr/bin/python
  2. """
  3. gencc: A simple program to generate credit card numbers that pass the
  4. MOD 10 check (Luhn formula).
  5. Usefull for testing e-commerce sites during development.
  6. Copyright 2003-2012 Graham King
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or
  10. (at your option) any later version.
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU General Public License for more details.
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. """
  19. # Different naming convention, because translated from PHP
  20. # pylint: disable=C0103
  21. from random import Random
  22. import copy
  23. visaPrefixList = [
  24. ['4', '5', '3', '9'],
  25. ['4', '5', '5', '6'],
  26. ['4', '9', '1', '6'],
  27. ['4', '5', '3', '2'],
  28. ['4', '9', '2', '9'],
  29. ['4', '0', '2', '4', '0', '0', '7', '1'],
  30. ['4', '4', '8', '6'],
  31. ['4', '7', '1', '6'],
  32. ['4']]
  33. mastercardPrefixList = [
  34. ['5', '1'], ['5', '2'], ['5', '3'], ['5', '4'], ['5', '5']]
  35. amexPrefixList = [['3', '4'], ['3', '7']]
  36. discoverPrefixList = [['6', '0', '1', '1']]
  37. dinersPrefixList = [
  38. ['3', '0', '0'],
  39. ['3', '0', '1'],
  40. ['3', '0', '2'],
  41. ['3', '0', '3'],
  42. ['3', '6'],
  43. ['3', '8']]
  44. enRoutePrefixList = [['2', '0', '1', '4'], ['2', '1', '4', '9']]
  45. jcbPrefixList = [['3', '5']]
  46. voyagerPrefixList = [['8', '6', '9', '9']]
  47. def completed_number(prefix, length):
  48. """
  49. 'prefix' is the start of the CC number as a string, any number of digits.
  50. 'length' is the length of the CC number to generate. Typically 13 or 16
  51. """
  52. ccnumber = prefix
  53. # generate digits
  54. while len(ccnumber) < (length - 1):
  55. digit = str(generator.choice(range(0, 10)))
  56. ccnumber.append(digit)
  57. # Calculate sum
  58. sum = 0
  59. pos = 0
  60. reversedCCnumber = []
  61. reversedCCnumber.extend(ccnumber)
  62. reversedCCnumber.reverse()
  63. while pos < length - 1:
  64. odd = int(reversedCCnumber[pos]) * 2
  65. if odd > 9:
  66. odd -= 9
  67. sum += odd
  68. if pos != (length - 2):
  69. sum += int(reversedCCnumber[pos + 1])
  70. pos += 2
  71. # Calculate check digit
  72. checkdigit = ((sum / 10 + 1) * 10 - sum) % 10
  73. ccnumber.append(str(checkdigit))
  74. return ''.join(ccnumber)
  75. def credit_card_number(rnd, prefixList, length, howMany):
  76. result = []
  77. while len(result) < howMany:
  78. ccnumber = copy.copy(rnd.choice(prefixList))
  79. result.append(completed_number(ccnumber, length))
  80. return result
  81. def output(title, numbers):
  82. result = []
  83. result.append(title)
  84. result.append('-' * len(title))
  85. result.append('\n'.join(numbers))
  86. result.append('')
  87. return '\n'.join(result)
  88. #
  89. # Main
  90. #
  91. generator = Random()
  92. generator.seed() # Seed from current time
  93. print("darkcoding credit card generator\n")
  94. mastercard = credit_card_number(generator, mastercardPrefixList, 16, 10)
  95. print(output("Mastercard", mastercard))
  96. visa16 = credit_card_number(generator, visaPrefixList, 16, 10)
  97. print(output("VISA 16 digit", visa16))
  98. visa13 = credit_card_number(generator, visaPrefixList, 13, 5)
  99. print(output("VISA 13 digit", visa13))
  100. amex = credit_card_number(generator, amexPrefixList, 15, 5)
  101. print(output("American Express", amex))
  102. # Minor cards
  103. discover = credit_card_number(generator, discoverPrefixList, 16, 3)
  104. print(output("Discover", discover))
  105. diners = credit_card_number(generator, dinersPrefixList, 14, 3)
  106. print(output("Diners Club / Carte Blanche", diners))
  107. enRoute = credit_card_number(generator, enRoutePrefixList, 15, 3)
  108. print(output("enRoute", enRoute))
  109. jcb = credit_card_number(generator, jcbPrefixList, 16, 3)
  110. print(output("JCB", jcb))
  111. voyager = credit_card_number(generator, voyagerPrefixList, 15, 3)
  112. print(output("Voyager", voyager))

运行结果如下:

  1. darkcoding credit card generator
  2. Mastercard
  3. ----------
  4. 5249241445603178
  5. 5474662131739768
  6. 5581517450441661
  7. 5588253309068355
  8. 5514774944030079
  9. 5122826749528287
  10. 5152966434002124
  11. 5268127987312292
  12. 5385676074198087
  13. 5330181839518097
  14. VISA 16 digit
  15. -------------
  16. 4539503803848378
  17. 4716973052847436
  18. 4556149936260376
  19. 4486565514724761
  20. 4556309354978160
  21. 4486560485591158
  22. 4916213564870669
  23. 4486704671699934
  24. 4532839100193192
  25. 4486613519985266
  26. VISA 13 digit
  27. -------------
  28. 4929905559973
  29. 4556870828321
  30. 4916868200216
  31. 4556189916056
  32. 4024007171180
  33. American Express
  34. ----------------
  35. 376197656730660
  36. 342421777432696
  37. 342896016604918
  38. 343458311286898
  39. 374543958196088
  40. Discover
  41. --------
  42. 6011676180456692
  43. 6011298953567876
  44. 6011699666196053
  45. Diners Club / Carte Blanche
  46. ---------------------------
  47. 30066643308583
  48. 38302315481859
  49. 38251784096120
  50. enRoute
  51. -------
  52. 214935400146170
  53. 201435309964331
  54. 201450317314858
  55. JCB
  56. ---
  57. 3506641780149880
  58. 3561856856065701
  59. 3508395818816022
  60. Voyager
  61. -------
  62. 869984254736122
  63. 869938197246102
  64. 869921075232782

希望本文所述对大家的Python程序设计有所帮助。

人气教程排行