Python随机生成身份证号码及校验功能
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
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随机生成身份证号码及校验功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站事(zalou.cn)网站的支持!
您可能感兴趣的文章:
- Python随机生成彩票号码的方法
- Python实现随机生成有效手机号码及身份证功能示例
- Python生成随机数的方法
- python 生成不重复的随机数的代码
- Python生成不重复随机值的方法
- Python生成随机MAC地址
- Python随机生成信用卡卡号的实现方法
- Python简单生成随机姓名的方法示例
- Python实现随机创建电话号码的方法示例
- 设置linux账号的有效时间
- relative定位的理解
- shell+curl监控网站页面(域名访问状态),并利用sedemail发送邮件
- 写稿机器人获“吴文俊奖”,能提升今日头条内容质量吗
- 使用jQuery自动缩图片 - [jQuery]
- apt-get update更新源时,出现“Hash Sum mismatch”问题
- linux下DHCP服务原理总结
- DIV的宽度自动适应功能
- 在虚拟主机上发布.Net应用的一些总结
- msmq发送速度的测试
- nfs服务部署记录
- Javascript版的Repeater控件实现
- Bootstrap笔记
- 分享一例测试环境下nginx+tomcat的视频业务部署记录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP判断是否微信访问的方法示例
- Pytorch损失函数nn.NLLLoss2d()用法说明
- python实现学生成绩测评系统
- Python dict的常用方法示例代码
- Scrapy模拟登录赶集网的实现代码
- opencv 图像腐蚀和图像膨胀的实现
- PHP实现微信退款的方法示例
- 基于Python和C++实现删除链表的节点
- python让函数不返回结果的方法
- PHP微商城开源代码实例
- PHP小程序支付功能完整版【基于thinkPHP】
- CodeIgniter框架实现的整合Smarty引擎DEMO示例
- PHP微信支付功能示例
- PHP中ltrim()函数的用法与实例讲解
- Laravel 中创建 Zip 压缩文件并提供下载的实现方法