基于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算法学习之计数排序实例
Dec 18 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
使用Python3制作TCP端口扫描器
Apr 17 Python
python使用正则表达式的search()函数实现指定位置搜索功能
Nov 10 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
Python定义一个跨越多行的字符串的多种方法小结
Jul 19 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
解决python tkinter界面卡死的问题
Jul 17 Python
Python任务调度模块APScheduler使用
Apr 15 Python
Python接收手机短信的代码整理
Aug 02 Python
浅析python中的del用法
Sep 02 Python
PyQt5的QWebEngineView使用示例
Oct 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
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
Django学习笔记之Class-Based-View
2017/02/15 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
python实现教务管理系统
2018/03/12 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
python设置表格边框的具体方法
2020/07/17 Python
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
数字漫画:comiXology
2020/06/13 全球购物
C语言编程练习
2012/04/02 面试题
各营销点岗位职责范本
2014/03/05 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
教学反思怎么写
2016/02/24 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js