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实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
Python中条件判断语句的简单使用方法
Aug 21 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
WxPython实现无边框界面
Nov 18 Python
Python hashlib常见摘要算法详解
Jan 13 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
解决flask接口返回的内容中文乱码的问题
Apr 03 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
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
js中的json对象详细介绍
2014/10/29 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
js判断节假日实例代码
2017/12/27 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
vuex存储token示例
2019/11/11 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
小程序表单认证布局及验证详解
2020/06/19 Javascript
Python简单读取json文件功能示例
2017/11/30 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
用Python一键搭建Http服务器的方法
2018/06/01 Python
Python多线程原理与用法详解
2018/08/20 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
华三通信H3C面试题
2015/05/15 面试题
大一新生军训时的自我评价分享
2013/12/05 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
节约粮食标语
2014/06/18 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
老干部座谈会主持词
2015/07/03 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers