基于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 Socket编程入门教程
Jul 11 Python
Python实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
python冒泡排序简单实现方法
Jul 09 Python
浅析Python基础-流程控制
Mar 18 Python
python 中random模块的常用方法总结
Jul 08 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
详谈python read readline readlines的区别
Sep 22 Python
Python机器学习之SVM支持向量机
Dec 27 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 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计算两个文件相对路径的方法
2015/03/14 PHP
php数据访问之增删改查操作
2016/05/09 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
openCV提取图像中的矩形区域
2020/07/21 Python
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
学前教育教师求职自荐信
2013/09/22 职场文书
2013年大学生的自我鉴定
2013/10/24 职场文书
员工培训邀请函
2014/01/11 职场文书
银行类自荐信
2014/02/04 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
音乐剧猫观后感
2015/06/04 职场文书
2015年国培研修感言
2015/08/01 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server