Python练习:22行Python代码生成全国随机身份证号

程序要求

随机生成身份证号码,要求规则符合要求:

前 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:11:02:"X"3:94:85:76:67:58:49:310: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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!