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

技术Python实战小项目之如何实现身份证信息校验这篇文章主要介绍“Python实战小项目之如何实现身份证信息校验”,在日常操作中,相信很多人在Python实战小项目之如何实现身份证信息校验问题上存在疑惑,小编查阅了各式

本文主要介绍“如何在Python实战小项目中验证身份证信息”。在日常操作中,相信很多人对Python实战小项目中如何验证身份证信息有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解决“Python实战小项目中如何验证身份证信息”的疑惑。接下来,请和边肖一起学习!

00-1010创建一个程序,输入身份证号,并输出以下信息。

性别:男性

地点:福建省龙岩市永定县。

出生日期:2000年5月1日。

第一个男孩出生当天在警察局登记。

校验码:0

身份证号码真实性:真实。

00-1010身份证区号。xls(已上传)。

身份证号码的构成

身份证校验码算法

00-1010 18位身份证=17位信息数据1位校验码。

1到6位,7到14位,15到16位,17位和18位,区号,出生日期,登记日期,代码,性别校验码,性别:男孩奇数,女孩偶数。

1表示第一个注册的男孩。

3表示第二个注册男孩。

等等

00-1010 1到17位各乘以相应的权重,然后求和。

结果是11的余数。

根据余数找到对应的校验码。

每个比特对应的权重(17比特的信息数据,从左到右,第一个比特对应7,第二个比特对应9,以此类推)。

权重=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]对应余数和校验码的字典(2对应罗马数字“x”10)。

verification_dict={0:1,

1:0,

2:'X ',

3:9,

4:8,

5:7,

6:6,

7:5,

8:4,

9:3,

(=NationalBureauofStandards)国家标准局

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

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/38075.html

(0)

相关推荐

  • 使用rpm删除包的正确姿势是怎样的

    技术使用rpm删除包的正确姿势是怎样的这篇文章给大家介绍使用rpm删除包的正确姿势是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、使用rpm指令3秒删除PHP所有包在安装所有的框架和安装包

    攻略 2021年11月9日
  • C++迭代器与二分查找方法是什么

    技术C++迭代器与二分查找方法是什么本篇内容主要讲解“C++迭代器与二分查找方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++迭代器与二分查找方法是什么”吧!

    攻略 2021年11月30日
  • ajax对注册名进行验证检测存在于数据库中的实例分析

    技术ajax对注册名进行验证检测存在于数据库中的实例分析ajax对注册名进行验证检测存在于数据库中的实例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。这

    攻略 2021年12月2日
  • 笔记本键盘失灵怎么办,笔记本电脑键盘失灵怎么办

    技术笔记本键盘失灵怎么办,笔记本电脑键盘失灵怎么办笔记本键盘按键失灵可分为2种情况笔记本键盘失灵怎么办:比较常见的按字母键会显示成数字的情况发生,遇到最多的就是这种情况了;另外一种情况是笔记本键盘出现了问题,具体解决方法

    生活 2021年10月20日
  • SQL Server Report Service网页页面显示英文问题怎么办

    技术SQL Server Report Service网页页面显示英文问题怎么办今天就跟大家聊聊有关SQL Server Report Service网页页面显示英文问题怎么办,可能很多人都不太了解,为了让大家更加了解,

    攻略 2021年11月29日
  • 1公斤柴油等于多少升,二百公斤柴油等于多少升柴油

    技术1公斤柴油等于多少升,二百公斤柴油等于多少升柴油楼上的别瞎算害人,快回去进修完小学再来回复别人的问题1公斤柴油等于多少升。国标柴油的密度范围为0.810~0.855不同型号的密度不同常用如:0#柴油0.84密度公用/

    生活 2021年10月23日