基于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函数参数类型*、**的区别
Apr 11 Python
Python变量作用范围实例分析
Jul 07 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
python 装饰器重要在哪
Feb 14 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/10/09 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
常用PHP封装分页工具类
2017/01/14 PHP
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
python使用cookielib库示例分享
2014/03/03 Python
python中将字典形式的数据循环插入Excel
2018/01/16 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
Python基于WordCloud制作词云图
2019/11/29 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
职员竞岗演讲稿
2014/05/14 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python