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


Posted in Python onMay 14, 2015

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
Python实现测试磁盘性能的方法
Mar 12 Python
Python实现统计代码行的方法分析
Jul 12 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
Python配置虚拟环境图文步骤
May 20 Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 Python
讲解Python中运算符使用时的优先级
May 14 #Python
讲解Python中的标识运算符
May 14 #Python
在Python中使用成员运算符的示例
May 13 #Python
总结Python中逻辑运算符的使用
May 13 #Python
解析Python中的二进制位运算符
May 13 #Python
整理Python中的赋值运算符
May 13 #Python
实例说明Python中比较运算符的使用
May 13 #Python
You might like
一个程序下载的管理程序(三)
2006/10/09 PHP
PHP发送短信代码分享
2015/08/11 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
苹果香港官方商城:Apple香港
2016/09/14 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
韩国11街:11STREET
2018/03/27 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
生物科学系大学生的自我评价
2013/12/20 职场文书
中专生自我鉴定书范文
2013/12/28 职场文书
病媒生物防治方案
2014/05/13 职场文书
阅兵口号
2014/06/19 职场文书
交通事故委托书范本
2014/09/28 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
学校国庆节活动总结
2015/03/23 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫