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解析xml文件操作实例
Oct 05 Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 Python
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
Python脚本实时处理log文件的方法
Nov 21 Python
详解python实现识别手写MNIST数字集的程序
Aug 03 Python
python 字典修改键(key)的几种方法
Aug 10 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
快速排序的四种python实现(推荐)
Apr 03 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
Python实现非正太分布的异常值检测方式
Dec 09 Python
Python urlopen()和urlretrieve()用法解析
Jan 07 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
菜单效果
2006/10/14 Javascript
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
AspNet中使用JQuery boxy插件的确认框
2015/05/20 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
Python高级用法总结
2018/05/26 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
Python创建字典的八种方式
2019/02/27 Python
Python画图高斯分布的示例
2019/07/10 Python
python定义类的简单用法
2020/07/24 Python
家庭户外服装:Hawkshead
2017/11/02 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
日语系毕业生推荐信
2013/11/11 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
企业文化标语口号
2014/06/09 职场文书
解放思想演讲稿
2014/09/11 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
毕业生实习证明
2014/09/19 职场文书
党员批评与自我批评
2014/10/15 职场文书
铣工实训报告
2014/11/05 职场文书
财务工作失职检讨书
2014/11/21 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
python编写五子棋游戏
2021/05/25 Python
浅谈Python数学建模之线性规划
2021/06/23 Python