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网络爬虫技术高阶用法

    网络爬虫成为了自动化数据抓取的核心工具,Python 拥有强大的第三方库支持,在网络爬虫领域的应用尤为广泛,本文将深入探讨 Python 网络爬虫的高阶用法,包括处理反爬虫机制、动态网页抓取、分布式爬虫以及并发和异步爬虫等技术,帮助读者掌握高级Python爬虫技术
    2024-12-12
  • Python创建临时文件和文件夹

    Python创建临时文件和文件夹

    这篇文章主要介绍了Python如何创建临时文件和文件夹,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Python 包管理器pip入门教程

    Python 包管理器pip入门教程

    这篇文章主要为大家介绍了Python pip包管理器入门教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • python模块导入的细节详解

    python模块导入的细节详解

    这篇文章主要给大家介绍了关于python模块导入细节的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • python中join()方法介绍

    python中join()方法介绍

    Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。这篇文章主要介绍了python中join()方法,需要的朋友可以参考下
    2018-10-10
  • python实现Zabbix-API监控

    python实现Zabbix-API监控

    这篇文章主要为大家详细介绍了python实现Zabbix-API监控,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Python获取某一进程的CPU利用率的方法详解

    Python获取某一进程的CPU利用率的方法详解

    这篇文章主要为大家详细介绍了如何使用Python实现获取某一进程的CPU利用率,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • python Tkinter实例详解

    python Tkinter实例详解

    tkinter(Tk interface)是Python的标准GUl库,支持跨平台的GUl程序开发。tkinter适合小型的GUl程序编写,也特别适合初学者学习GUl编程,这篇文章主要介绍了python Tkinter详解,需要的朋友可以参考下
    2023-03-03
  • python+matplotlib绘制简单的海豚(顶点和节点的操作)

    python+matplotlib绘制简单的海豚(顶点和节点的操作)

    这篇文章主要介绍了python+matplotlib绘制简单的海豚(顶点和节点的操作),具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python 文本单词提取和词频统计的实例

    python 文本单词提取和词频统计的实例

    今天小编就为大家分享一篇python 文本单词提取和词频统计的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论