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 相关文章推荐
9种python web 程序的部署方式小结
Jun 30 Python
Python中用于去除空格的三个函数的使用小结
Apr 07 Python
Python下线程之间的共享和释放示例
May 04 Python
使用Python进行目录的对比方法
Nov 01 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
python本地文件服务器实例教程
May 02 Python
python index() 与 rindex() 方法的使用示例详解
Dec 24 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学习之数组值的操作
2011/04/17 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
解javascript 混淆加密收藏
2009/01/16 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
node.js的事件机制
2017/02/08 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
python中私有函数调用方法解密
2016/04/29 Python
python实现泊松图像融合
2018/07/26 Python
Python3中exp()函数用法分析
2019/02/19 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
python线程的几种创建方式详解
2019/08/29 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
浅析Python面向对象编程
2020/07/10 Python
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
计算机软件专业求职信
2014/06/10 职场文书
暑期社会实践证明书
2014/11/17 职场文书
python flappy bird小游戏分步实现流程
2022/02/15 Python
python和anaconda的区别
2022/05/06 Python