千家信息网

Python实战小项目之如何实现身份证信息校验

发表于:2024-11-15 作者:千家信息网编辑
千家信息网最后更新 2024年11月15日,这篇文章主要介绍"Python实战小项目之如何实现身份证信息校验",在日常操作中,相信很多人在Python实战小项目之如何实现身份证信息校验问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2024年11月15日Python实战小项目之如何实现身份证信息校验

这篇文章主要介绍"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 pdimport numpy as npdata = 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)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实战小项目之如何实现身份证信息校验"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0