这篇文章主要介绍“Python实战小项目之如何实现身份证信息校验”,在日常操作中,相信很多人在Python实战小项目之如何实现身份证信息校验问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python实战小项目之如何实现身份证信息校验”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
制作个程序,输入身份证号码,输出如下信息
性别 : 男
地区 : 福建省龙岩市永定县
出生年月日: 2000年05月01日
出生当日派出所登记的第 1 个男孩
校验码: 0
身份证号真伪性: 真
身份证区域代码.xls(已上传)
身份证号码组成
身份证校验码算法
18位身份证=17位信息数据+1位校验码
1到6位 | 7到14位 | 15到16位 | 17位 | 18位 |
---|---|---|---|---|
区域代码 | 出生年月日 | 登记所代码 | 性别 | 校验码 |
性别:男生为奇数,女生为偶数
1表示第一个登记的男生
3表示第二个登记的男生
以此类推
1到17位 每位 乘以 对应的权值 再求和
将结果对11取余数
根据余数找到对应的校验码
每一位对应的权值(17位信息数据,从左往右,第一位对应7,第二位对应9,以此类推)
weights=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
余数与校验码对应字典(2对应罗马数字“X”–十)
verification_dict={0:1,
1:0,
2:"X",
3:9,
4:8,
5:7,
6:6,
7:5,
8:4,
9:3,
10:2}
import pandas as pd
import numpy as np
data = pd.read_excel('身份证区域代码完整版.xls')
# 读取18位身份证
sfz=input()
# 对身份证信息切片
position=int(sfz[0:6])
birthday=sfz[6:14]
police_code=sfz[14:16]
sex_code=int(sfz[16])
verification=int(sfz[17])
# 获取区域名字,如福建省龙岩市永定县
position_name=data.iloc[data.loc[data['代码'] == position].index[0]]['名称']
# 确定性别,并确定是该登记所第几个登记的
def sex(n):
train_list=[]
male_list=[1,3,5,7,9]
female_list=[0,2,4,6,8]
if n in male_list:
train_list.append('男')
train_list.append(male_list.index(n)+1)
else:
train_list.append('女')
train_list.append(female_list.index(n)+1)
return train_list
# 校验算法
weights=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
sfz_code=[]
for item in sfz:
sfz_code.append(int(item))
weights_sfz=[]
for i in sfz_code:
for j in weights:
weights_sfz.append(i*j)
# 找到余数
target=sum(weights_sfz)%11
verification_dict={0:1,
1:0,
2:"X",
3:9,
4:8,
5:7,
6:6,
7:5,
8:4,
9:3,
10:2}
# 找到余数对应的第18位校验码
def verification_whether(target_n):
return verification_dict[target_n]
# 看看输入的身份证校验码和算出来的校验码是否一致,如果不一致,则是假身份证
def verification_true_false(sfz_verification,target_n_whether):
if sfz_verification == target_n_whether:
return "真"
else:
return "假"
# 将结果格式化打印出来
print("性别 :",sex(sex_code)[0])
print("地区 :",position_name)
print("出生年月日: {}年{}月{}日".format(birthday[0:4],birthday[4:6],birthday[6:8]))
print("出生当日派出所登记的第 {} 个{}孩".format(sex(sex_code)[1],sex(sex_code)[0]))
print("校验码:",verification)
print("身份证号真伪性:",verification_true_false(verification,verification_whether(target)))
到此,关于“Python实战小项目之如何实现身份证信息校验”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。