基于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 相关文章推荐
web.py 十分钟创建简易博客实现代码
Apr 22 Python
全面理解Python中self的用法
Jun 04 Python
Python可变参数用法实例分析
Apr 02 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
Python简单生成随机姓名的方法示例
Dec 27 Python
pandas中apply和transform方法的性能比较及区别介绍
Oct 30 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
Python实现RGB与HSI颜色空间的互换方式
Nov 27 Python
Python实现桌面翻译工具【新手必学】
Feb 12 Python
pyCharm 实现关闭代码检查
Jun 09 Python
python实现简单倒计时功能
Apr 21 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语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
php在window iis的莫名问题的测试方法
2013/05/14 PHP
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
python装饰器使用方法实例
2013/11/21 Python
Python简单进程锁代码实例
2015/04/27 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
python中将字典形式的数据循环插入Excel
2018/01/16 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
如何解决python多种版本冲突问题
2020/10/13 Python
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
大学生毕业求职自荐书范文
2014/02/04 职场文书
商务英语广告词大全
2014/03/18 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
2015年人事科工作总结
2015/04/28 职场文书
教师节班会开场白
2015/06/01 职场文书
成绩单家长意见
2015/06/03 职场文书
Python Socket编程详解
2021/04/25 Python
JavaScript异步操作中串行和并行
2021/11/20 Javascript
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android