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

 更新时间:2021年10月20日 14:24:44   作者:同心圆计算  
读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用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)))

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

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

相关文章

  • 如何利用Python识别图片中的文字详解

    如何利用Python识别图片中的文字详解

    不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.这个时候我们就会选择截图保存,但是当我们想用到里面的文字时,还是要一个字一个字打出来,那么能不能直接识别图片中的文字呢?答案是肯定的,需要的朋友可以参考下
    2021-05-05
  • Python实现斐波那契数列的示例代码

    Python实现斐波那契数列的示例代码

    斐波那契数列是一种经典的数学问题,在计算机科学和编程中经常被用来演示算法和递归的概念,本文将详细介绍斐波那契数列的定义、计算方法以及如何在Python中实现它,需要的可以参考下
    2024-01-01
  • Selenium的使用详解

    Selenium的使用详解

    今天小编就为大家分享一篇关于Selenium的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • python七种方法判断字符串是否包含子串

    python七种方法判断字符串是否包含子串

    这篇文章主要介绍了python七种方法判断字符串是否包含子串,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • Pytorch 使用 nii数据做输入数据的操作

    Pytorch 使用 nii数据做输入数据的操作

    这篇文章主要介绍了Pytorch 使用 nii数据做输入数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python 二分查找之bisect库的使用详解

    Python 二分查找之bisect库的使用详解

    。二分查找是一种在有序列表中查找某一特定元素的搜索算法,bisect 库是 Python 标准库中的一部分,它提供了二分查找的功能,这篇文章主要介绍了Python 二分查找之bisect库的使用,需要的朋友可以参考下
    2023-03-03
  • Python中通过property设置类属性的访问

    Python中通过property设置类属性的访问

    为了达到类似C++类的封装性能,可以使用property来设置Python类属性的访问权限,本文就介绍一下Python中通过property设置类属性的访问,感兴趣的可以了解一下,感兴趣的可以了解一下
    2023-09-09
  • 使用Pandas实现高效读取筛选csv数据

    使用Pandas实现高效读取筛选csv数据

    在数据分析和数据科学领域中,Pandas 是 Python 中最常用的库之一,本文将介绍如何使用 Pandas 来读取和处理 CSV 格式的数据文件,希望对大家有所帮助
    2024-04-04
  • Python中导入csv数据文件的详细示例教程

    Python中导入csv数据文件的详细示例教程

    Python中的csv模块是一种用于读取和写入csv文件的模块,csv可以用于将数据从文件或者其他来源导入到Python中进行分析和处理,在这篇文章中,我们将全面介绍Python中如何导入csv文件,并将从多个方面进行详细探讨,感兴趣的朋友一起看看吧
    2024-03-03
  • python pip源配置,pip配置文件存放位置的方法

    python pip源配置,pip配置文件存放位置的方法

    今天小编就为大家分享一篇python pip源配置,pip配置文件存放位置的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07

最新评论