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网络编程之读取网站根目录实例
Sep 30 Python
Python使用Redis实现作业调度系统(超简单)
Mar 22 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
python实现拓扑排序的基本教程
Mar 11 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
详解Python绘图Turtle库
Oct 12 Python
python中怎么表示空值
Jun 19 Python
python使用ctypes库调用DLL动态链接库
Oct 22 Python
python操作ini类型配置文件的实例教程
Oct 30 Python
matplotlib阶梯图的实现(step())
Mar 02 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内核学习教程之php opcode内核实现
2016/01/27 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
php中的异常和错误浅析
2017/05/03 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
jquery等待效果示例
2014/05/01 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
python基础教程之匿名函数lambda
2017/01/17 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
python 搜索大文件的实例代码
2019/07/08 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
使用Python函数进行模块化的实现
2019/11/15 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
玩具公司的创业计划书
2013/12/31 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
2016国庆促销广告语
2016/01/28 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
redis中lua脚本使用教程
2021/11/01 Redis