新闻动态

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

发布日期:2021-12-22 12:41 | 文章来源:脚本之家

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)))

才疏学浅,代码诸多不足,欢迎交流学习!
Jay Kwong

到此这篇关于Python实战小项目之身份证信息校验的文章就介绍到这了,更多相关Python 身份证校验内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部