基于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 k-近邻算法实例分享
Jun 11 Python
Python装饰器使用实例:验证参数合法性
Jun 24 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
Sep 05 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 Python
Python 中由 yield 实现异步操作
May 04 Python
Django中FilePathField字段的用法
May 21 Python
基于python纯函数实现井字棋游戏
May 27 Python
python入门学习关于for else的特殊特性讲解
Nov 20 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包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
Ext 表单布局实例代码
2009/04/30 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
python SVD压缩图像的实现代码
2019/11/05 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
python中doctest库实例用法
2020/12/31 Python
十佳班主任事迹材料
2014/01/18 职场文书
社会实践活动总结范文
2014/07/03 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
Python 语言实现六大查找算法
2021/06/30 Python
sql注入教程之类型以及提交注入
2021/08/02 MySQL