基于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可跨平台实现获取按键的方法
Mar 05 Python
关于Django外键赋值问题详解
Aug 13 Python
python select.select模块通信全过程解析
Sep 20 Python
python图像常规操作
Nov 11 Python
对python3 urllib包与http包的使用详解
May 10 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
python 实现list或string按指定分段
Dec 25 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
python with (as)语句实例详解
Feb 04 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 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
第十四节 命名空间 [14]
2006/10/09 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
php swoft框架实例用法
2020/12/22 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
微信小程序网络封装(简单高效)
2018/08/06 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
了解重排与重绘
2019/05/29 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
Python目录和文件处理总结详解
2019/09/02 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
详解python中的异常和文件读写
2021/01/03 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
一名毕业生的自我鉴定
2013/12/04 职场文书
期末自我鉴定
2014/01/23 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
募捐倡议书
2014/04/14 职场文书
五一口号
2014/06/19 职场文书
班主任培训研修日志
2015/11/13 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
Python Django模型详解
2021/10/05 Python