基于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创建XML文档
Mar 01 Python
Python简单日志处理类分享
Feb 14 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
利用python实现周期财务统计可视化
Aug 25 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
Django 返回json数据的实现示例
Mar 05 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
通过cmd进入python的步骤
Jun 16 Python
python输入中文的实例方法
Sep 14 Python
谈谈python垃圾回收机制
Sep 27 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
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
跟老齐学Python之print详解
2014/09/28 Python
Python三级目录展示的实现方法
2016/09/28 Python
python类的继承实例详解
2017/03/30 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
python爬虫容易学吗
2020/06/02 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
四风问题查摆材料
2014/08/25 职场文书
小学教师求职信范文
2015/03/20 职场文书
教师思想工作总结2015
2015/05/13 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
redis限流的实际应用
2021/04/24 Redis
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技