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 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
linux系统使用python获取cpu信息脚本分享
Jan 15 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
tensorflow 获取变量&amp;打印权值的实例讲解
Jun 14 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
python多线程http压力测试脚本
Jun 25 Python
Djang的model创建的字段和参数详解
Jul 27 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
Python实现点云投影到平面显示
Jan 18 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
Python执行时间的几种计算方法
Jul 31 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自定义函数转换html标签示例
2016/09/29 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
python开发之文件操作用法实例
2015/11/13 Python
在Python中执行系统命令的方法示例详解
2017/09/14 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
python 进程池pool使用详解
2020/10/15 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
应届实习生的自我评价范文
2014/01/05 职场文书
质量保证书范本
2014/04/29 职场文书
美容院管理规章制度
2015/08/05 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
golang实现浏览器导出excel文件功能
2022/03/25 Golang