基于Python的身份证号码自动生成程序


Posted in Python onAugust 15, 2014

需求细化:

1.身份证必须能够通过身份证校验程序。

2.通过查询,发现身份证号码是有国家标准的,标准号为 GB 11643-1999 可以从百度下载到这个文档

下载:GB11643-1999sfz(3water.com).rar

现行身份证号为18位,分别为6位地址码,8位生日,3位顺序码,一位校验码。具体例子可见下图。

  基于Python的身份证号码自动生成程序

  前六位也是国家标准,GB2260-2007。吐槽一下,国标竟然没有一个网站供全面检索和免费下载。。。还好国家统计局有这些公开数据。可以从统计数据-》统计标准-》行政区划代码页面内找到最新数据:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html (这个网页上的数据可能会旧)

出生年月日是8位

顺序码是3位,男生末尾为基数,女生末尾为偶数。

最后一位是校验码。校验算法其实后面有很多数学道理,这里给出最简单的公式:

前17位数字每一位有一个权重值

将第i位上的权重值记作Wi,Wi的值为 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

将身份证第i位的数字记作Ai

则使用下列公式算出一个数

S= Sum(Ai*Wi) mod 11 ------------- Sum(Ai*Wi) 取11的模。

这样S的取值如下表:

对每一个S做一个映射 Y,这样就有如下的表

S:0 1 2 3 4 5 6 7 8 9 10
Y:1 0 X 9 8 7 6 5 4 3 2

Y就是最终的校验码。

原型实现过程:

1.获取区域规划码的list,并读入一个dictionary的list中。dictionary结构如下:

{"state":河北省,"city":沧州市,"district":运河区,"code":130903}

丑陋的原型如下: 

def getdistrictcode():
  with open('districtcode') as file:
    data = file.read()
  districtlist = data.split('\n')
  global codelist
  codelist = []
  for node in districtlist:
    #print node
    if node[10:11] != ' ':
      state = node[10:].strip()
    if node[10:11]==' 'and node[12:13]!=' ':
      city = node[12:].strip()
    if node[10:11] == ' 'and node[12:13]==' ':
      district = node[14:].strip()
      code = node[0:6]
      codelist.append({"state":state,"city":city,"district":district,"code":code})

上部你得到了一个codelist,里边有所有的区号了。

下面是生成身份证号的原型,基本上是随机生成

def gennerator():
  id = codelist[random.randint(0,len(codelist))]['code'] #地区项
  id = id + str(random.randint(1930,2013)) #年份项
  da = date.today()+timedelta(days=random.randint(1,366)) #月份和日期项
  id = id + da.strftime('%m%d')
  id = id+ str(random.randint(100,300))#,顺序号简单处理

  i = 0
  count = 0
  weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] #权重项
  checkcode ={'0':'1','1':'0','2':'X','3':'9','4':'8','5':'7','6':'6','7':'5','8':'5','9':'3','10':'2'} #校验码映射
  for i in range(0,len(id)):
    count = count +int(id[i])*weight[i]
  id = id + checkcode[str(count%11)] #算出校验码
  return id

原型用到了python的两个标准库

from datetime import date
from datetime import timedelta

这样就能初步满足需要了,后续可以根据要就对工具进行细化。

btw,其实,正在开发一个测试数据生成的工具集,近期争取开源。有任何具体需求可以提给我。有想一起做的同学也大大的欢迎:)

Python 相关文章推荐
基于python的Tkinter编写登陆注册界面
Jun 30 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
Python面向对象类的继承实例详解
Jun 27 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
详解python中docx库的安装过程
Nov 08 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
python高级特性简介
Aug 13 Python
Python异常处理总结
Aug 15 #Python
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 #Python
Python3基础之函数用法
Aug 13 #Python
Python3基础之条件与循环控制实例解析
Aug 13 #Python
Python3基础之基本运算符概述
Aug 13 #Python
Python3基础之list列表实例解析
Aug 13 #Python
Python3基础之基本数据类型概述
Aug 13 #Python
You might like
php去除重复字的实现代码
2011/09/16 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
PHP数组操作类实例
2015/07/11 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
Vue.js实现可编辑的表格
2019/12/11 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
详解Python中的文件操作
2016/08/28 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
Python进行特征提取的示例代码
2020/10/15 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
美国网上花店:JustFlowers
2017/02/12 全球购物
C语言面试题
2013/05/19 面试题
优秀员工个人的自我评价
2013/11/29 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
学习保证书100字
2015/02/26 职场文书
关于远足的感想
2015/08/10 职场文书
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript