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的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
使用Python从有道词典网页获取单词翻译
Jul 03 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
浅谈Python中range和xrange的区别
Dec 20 Python
python实现ID3决策树算法
Dec 20 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
python 生成图形验证码的方法示例
Nov 11 Python
python三引号输出方法
Feb 27 Python
解决keras backend 越跑越慢问题
Jun 18 Python
python实现学生成绩测评系统
Jun 22 Python
python各种excel写入方式的速度对比
Nov 10 Python
详解Python中的Lock和Rlock
Jan 26 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/05/10 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
php实现倒计时效果
2015/12/19 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
event对象的方法 兼容多浏览器
2009/06/27 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
Vue之mixin全局的用法详解
2018/08/22 Javascript
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
Python简单日志处理类分享
2015/02/14 Python
Python实现线程池代码分享
2015/06/21 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
HTML的form表单和django的form表单
2019/07/25 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Python sublime安装及配置过程详解
2020/06/29 Python
python怎么判断素数
2020/07/01 Python
python如何调用百度识图api
2020/09/29 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
传媒专业推荐信范文
2013/11/23 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
新年寄语大全
2014/04/12 职场文书
摄影展策划方案
2014/06/02 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript