基于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之hello world
May 21 Python
python实现的系统实用log类实例
Jun 30 Python
python机器学习之神经网络(三)
Dec 20 Python
《Python学习手册》学习总结
Jan 17 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
python pandas修改列属性的方法详解
Jun 09 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
Python反爬虫技术之防止IP地址被封杀的讲解
Jan 09 Python
python中dict()的高级用法实现
Nov 13 Python
基于python实现语音录入识别代码实例
Jan 17 Python
Django model class Meta原理解析
Nov 14 Python
Python机器学习应用之基于线性判别模型的分类篇详解
Jan 18 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常用代码
2006/11/23 PHP
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
Python的Urllib库的基本使用教程
2015/04/30 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
python datetime中strptime用法详解
2019/08/29 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
《守株待兔》教学反思
2014/03/01 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA
java版 联机五子棋游戏
2022/05/04 Java/Android