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之从if开始语句的征程
Sep 14 Python
python编程开发之textwrap文本样式处理技巧
Nov 13 Python
PyQt5每天必学之拖放事件
Aug 27 Python
python3+PyQt5泛型委托详解
Apr 24 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
pytorch实现线性拟合方式
Jan 15 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
详解python爬取弹幕与数据分析
Nov 14 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
scrapy-splash简单使用详解
Feb 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下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
Javascript----文件操作
2007/01/18 Javascript
JS window.opener返回父页面的应用
2009/10/24 Javascript
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
Dom与浏览器兼容性说明
2010/10/25 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
React简单介绍
2017/05/24 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
用Pygal绘制直方图代码示例
2017/12/07 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
python里运用私有属性和方法总结
2019/07/08 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
Django视图、传参和forms验证操作
2020/07/15 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
会计专业自我鉴定范文
2013/10/06 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫
python中filter,map,reduce的作用
2022/06/10 Python
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android