程序要求
随机生成身份证号码,要求规则符合要求:
前 6 位 :地区编码
7 -10 位:生日,年
11-12位:生日,月
13-14位:生日,日
15-17位:顺序及性别
第 18 位:校验码
程序中地区编码文件可在网上搜到并下载
程序源代码
import random # 导入随机库
path = "全国身份证号地区对应表 2023.txt"
# 取得号码前6位:地区码--------------------------------
# 打开文件,内容读取成列表
with open(path,'r',encoding='utf-8') as f:
list1 = f.readlines()
# 文件中,单行的格式为:130300 秦皇岛市
# 从列表中随机选择一个地区,
# 去除左右两边空格后,取前6位数字
d = random.choice(list1).strip()[:6]
# 生成生日:年、月、日--------------------------------
# 生成年。1980-2020随机,转为字符串
year = str(random.randint(1980,2020))
# 生成月。1-12月,暂时不转字符串,后面需要用数字
month = random.randint(1,12)
# 生成每月对应的天数,2月为28天(忽略平闰年)
list_month = [0,31,28,31,30,31,30,31,31,30,31,30,31]
# 生成日。1到月份对应的天数
day = random.randint(1, list_month[month])
# 分别将月、日转为两位数格式的字符串
month = str(month).rjust(2,"0")
day = str(day).rjust(2, "0")
# 生成顺序号和前17位号码----------------------------
n = str(random.randint(100,999))
a = d+year+month+day+n
# 生成第18位校验码---------------------------------
# 系数表。数值是固定的
xishu = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
# 计算每1位号码与对应系数的乘积,并求和
he = 0
for i in range(17):
s1 = int(a[i])
s2 = xishu[i]
he += s1*s2
# 校验码字典。数值是固定的
dict1 = {0:1, 1:0, 2:"X", 3:9, 4:8, 5:7, 6:6, 7:5, 8:4, 9:3, 10:2}
# 根据系数和除以11的余数,找到对应的检验码
x = str(dict1[he%11])
# 显示最终号码------------------------------------
print(a+x)
本文结束
如有疑问,请直接留言!必回!
如有帮助,请点赞转发!感谢!
我用实战的方法自学了多种编程语言,
希望把实战速学的方法传播给更多的人,
你的一赞之力就能让更多人看到。
关注Python入门速学,
带你实战快速学Python
原文始发于微信公众号(Python入门速学):Python练习:22行Python代码生成全国随机身份证号
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/236435.html