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装饰器
May 09 Python
Python3读取zip文件信息的方法
May 22 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
Python Grid使用和布局详解
Jun 30 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
Python内置函数locals和globals对比
Apr 28 Python
Python QTimer实现多线程及QSS应用过程解析
Jul 11 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 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
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
js数组方法扩展实现数组统计函数
2014/04/09 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
python集合用法实例分析
2015/05/30 Python
python logging日志模块的详解
2017/10/29 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
python操作链表的示例代码
2020/09/27 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
二年级数学教学反思
2014/01/21 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
大学生实习推荐信
2015/03/27 职场文书
教师旷工检讨书
2015/08/15 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
Pytorch可视化的几种实现方法
2021/06/10 Python
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS