基于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中使用ElementTree解析XML示例
Jun 02 Python
Python实现的简单hangman游戏实例
Jun 28 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
SQLite3中文编码 Python的实现
Jan 11 Python
python安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
python 获取一个值在某个区间的指定倍数的值方法
Nov 12 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
Sep 11 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
Jan 03 Python
python boto和boto3操作bucket的示例
Oct 30 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
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
js实现每日签到功能
2018/11/29 Javascript
python动态监控日志内容的示例
2014/02/16 Python
详解python数据结构和算法
2019/04/18 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
python实现代码统计程序
2019/09/19 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
浅析python 字典嵌套
2020/09/29 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
幼儿教师培训感言
2014/03/08 职场文书
论文诚信承诺书
2014/05/23 职场文书
司法所长先进事迹
2014/06/02 职场文书
档案保密承诺书
2014/06/03 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
应届生找工作求职信
2014/06/24 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
护理工作心得体会
2016/01/22 职场文书