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之Import 模块
Oct 13 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
深入解答关于Python的11道基本面试题
Apr 01 Python
Python探索之自定义实现线程池
Oct 27 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
关于Tensorflow使用CPU报错的解决方式
Feb 05 Python
基于python获取本地时间并转换时间戳和日期格式
Oct 27 Python
python asyncio 协程库的使用
Jan 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实现文件下载更能介绍
2012/11/23 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
JS控制表格隔行变色
2006/06/26 Javascript
JavaScript Date对象使用总结
2009/05/14 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
js实现3D旋转相册
2020/08/02 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
Python数组条件过滤filter函数使用示例
2014/07/22 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
python删除过期log文件操作实例解析
2018/01/31 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
python实现五子棋小游戏
2020/03/25 Python
基于python调用psutil模块过程解析
2019/12/20 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
德国童装购物网站:NICKI´S.com
2018/04/20 全球购物
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
DELPHI面试题研发笔试试卷
2015/11/08 面试题
大学生职业生涯规划书前言
2014/01/09 职场文书
茶叶生产计划书
2014/01/10 职场文书
少先队入队活动方案
2014/02/08 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
护士求职简历自我评价
2015/03/10 职场文书