Python随机生成身份证号码及校验功能


Posted in Python onDecember 04, 2018

GitHub : https://github.com/jayknoxqu/id-number-util

身份组成方式

中华人民共和国国家标准GB 11643-1999《公民身份号码》中规定:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。

18位数字组合的方式是:

1 1 0 1 0 2 Y Y Y Y M M D D 8 8 8 X
区域码(6位) 出生日期码(8位) 顺序码(2位) 性别码(1位) 校验码(1位)

区域码(6位) 出生日期码(8位) 顺序码(2位) 性别码(1位) 校验码(1位)

•区域码 指的是公民常住户口所在县(市、镇、区)的行政区划代码,如110102是北京市-西城区。但港澳台地区居民的身份号码只精确到省级。
•出生日期码 表示公民出生的公历年(4位)、月(2位)、日(2位)。
•顺序码 表示在同一区域码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号。
•性别码 奇数表示男性,偶数表示女性。
•最后一位是校验码,这里采用的是ISO 7064:1983,MOD 11-2校验码系统。校验码为一位数,但如果最后采用校验码系统计算的校验码是“10”,碍于身份证号码为18位的规定,则以“X”代替校验码“10”。

校验码计算方法

•1. 将身份证号码从右至左标记为a_1 , a_2 , \cdots , a_{18},a_1即为校验码;
•2. 计算权重系数 W_i=2^{i-1}\ \bmod \ {11}

所以:

i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1

•3. 计算S = \sum_{i=2}^{18} a_i \cdot W_i
•4. a_1=(12-( S \ \bmod 11)) \bmod 11

使用Python获取身份证校验码:

def get_check_digit(id_number):
  """通过身份证号获取校验码"""
  check_sum = 0
  for i in range(0, 17):
    check_sum += ((1 << (17 - i)) % 11) * int(id_number[i])
  check_digit = (12 - (check_sum % 11)) % 11
  return check_digit if check_digit < 10 else 'X'

随机生成身份证

由上面的组合方式我们可以得出以下代码:

@classmethod
def generate_id(cls, sex=0):
  """
  随机生成身份证号,sex = 0表示女性,sex = 1表示男性
  """
  # 随机生成一个区域码(6位数)
  area_info = random.randint(0, len(addr))
  id_number = str(addr[area_info][0])
  # 限定出生日期范围(8位数)
  start, end = "1960-01-01", "2000-12-30"
  days = (datetime.datetime.strptime(end, "%Y-%m-%d") - datetime.datetime.strptime(start, "%Y-%m-%d")).days + 1
  birth_days = datetime.datetime.strftime(
    datetime.datetime.strptime(start, "%Y-%m-%d") + datetime.timedelta(random.randint(0, days)), "%Y%m%d"
  )
  id_number += str(birth_days)
  # 顺序码(2位数)
  id_number += str(random.randint(10, 99))
  # 性别码(1位数)
  id_number += str(random.randrange(sex, 10, step=2))
  # 校验码(1位数)
  return id_number + str(cls(id_number).get_check_digit())

工具类主要功能

if __name__ == '__main__':
  random_sex = random.randint(0, 1) # 随机生成男(1)或女(0)
  print IdNumberUtil.generate_id(random_sex) # 随机生成身份证号
  print IdNumberUtil('410326199507103197').area_id # 地址编码:410326
  print IdNumberUtil('410326199507103197').get_area_name() # 地址:汝阳县
  print IdNumberUtil('410326199507103197').get_birthday() # 生日:1995-7-10
  print IdNumberUtil('410326199507103197').get_age() # 年龄:23(岁)
  print IdNumberUtil('410326199507103197').get_sex() # 性别:1(男)
  print IdNumberUtil('410326199507103197').get_check_digit() # 校验码:7
  print IdNumberUtil.verify_id('410326199507103198') # 检验身份证是否正确:False

[√]: 代码地址: https://github.com/jayknoxqu/id-number-util

总结

以上所述是小编给大家介绍的Python随机生成身份证号码及校验功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python Django连接MySQL数据库做增删改查
Nov 07 Python
Python中列表的一些基本操作知识汇总
May 20 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
Python3.5文件修改操作实例分析
May 01 Python
python使用opencv实现马赛克效果示例
Sep 28 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
TensorFlow实现自定义Op方式
Feb 04 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
如何从csv文件构建Tensorflow的数据集
Sep 21 Python
python 从文件夹抽取图片另存的方法
Dec 04 #Python
使用Python实现微信提醒备忘录功能
Dec 04 #Python
flask-restful使用总结
Dec 04 #Python
Python读取YUV文件,并显示的方法
Dec 04 #Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 #Python
用python代码将tiff图片存储到jpg的方法
Dec 04 #Python
浅谈python下tiff图像的读取和保存方法
Dec 04 #Python
You might like
PHP函数eval()介绍和使用示例
2014/08/20 PHP
php创建、获取cookie及基础要点分析
2015/01/26 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
python处理文本文件并生成指定格式的文件
2014/07/31 Python
Python跳出循环语句continue与break的区别
2014/08/25 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
Python探索之Metaclass初步了解
2017/10/28 Python
python list元素为tuple时的排序方法
2018/04/18 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
Python for i in range ()用法详解
2020/09/18 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
幼儿园小班教学反思
2014/02/02 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书