首页 > 编程语言 >Python计算身份证第18位(校验码)来判断身份证是否输入正确

Python计算身份证第18位(校验码)来判断身份证是否输入正确

时间:2023-05-18 15:31:31浏览次数:40  
标签:10 号码 17 Python 18 校验码 身份证 余数


Python计算身份证第18位(校验码)来判断身份证是否输入正确

前言

  1. 身份证编码规则如下:根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
  • 顺序码(身份证第十五位到十七位)是县、区级政府所辖派出所的分配码,每个派出所分配码为10个连续号码,例如“000-009”或“060-069”,其中单数为男性分配码,双数为女性分配码,如遇同年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。如:005的就是个男生,而且和他同年月日生的男生至少有两个,他们的后四位是001*和003*。分配顺序码中“999、998、997、996”四个顺序号分别为男女性百岁以上老人专用的特定编号。
  • 校验码(身份证最后一位)是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。
  1. 从1999年10月1日起,全国实行公民身份证号码制度,居民身份证编号由原15位升至18位。前6位为地址码;第七位至14位为出生日期码,此码由6位数改为8位数,其中年份用4位数表示;第15位至17位为顺序码,取消了顺序码中对百岁老人使用的特定编号;第十八位为校验码,主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用罗马数字符X表示。

校验码计算方法

  1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
  2. 将这17位数字和系数相乘的结果相加。
  3. 用加出来和除以11,看余数是多少?
  4. 余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2。
  5. 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。

例如:某女性的身份证号码是220202202002020022。我们要看看这个身份证是不是合法的身份证。
首先我们得出前17位的乘积和是98,然后用98除以11得出其余数是10。最后通过对应规则就可以知道余数10对应的数字是2。所以,可以判定这是一个合格的身份证号码。

用Python实现

lis = list(input('请输入身份证号码:'))
ten = ['X', 'x', 'Ⅹ']
ID = ["10" if x in ten else x for x in lis]     #将罗马数字Ⅹ和字母X替换为10
W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
Checkcode = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
sum = 0
for i in range(17):     #https://blog.zeruns.tech
    sum = sum + int(ID[i]) * W[i]
if Checkcode[sum % 11] == int(ID[17]):
    print('输入正确')
else:
    print('输入错误')

标签:10,号码,17,Python,18,校验码,身份证,余数
From: https://blog.51cto.com/zeruns/6303962

相关文章

  • 如何在windows系统下下载、安装python程序及可视化工具PyCharm
    1、python下载python下载官网:https://www.python.org/http://python.p2hp.com/中文网点击进入官网,进入window下载页面。https://www.python.org/downloads/windows/选择安装版本:推荐下载稳定的老版本,找到相应版本进行下载。这里下载是3.6.8Windowsx86-64embedda......
  • Python从零到壹丨图像增强的顶帽运算和底帽运算
    摘要:这篇文章详细介绍了顶帽运算和底帽运算,它们将为后续的图像分割和图像识别提供有效支撑。本文分享自华为云社区《[Python从零到壹]四十九.图像增强及运算篇之顶帽运算和底帽运算》,作者:eastmount。数学形态学(MathematicalMorphology)是一种应用于图像处理和模式识别领域的新......
  • Python的基础语法(三)之“语法结构”
    “语法结构”1、成员运算符:定义:就是查看某个个体是不是在某个群体里面1、in(在)2、notin(不在)names_list=['kevin','jack','tank','tony']print('kevin'innames_list)#Trueprint('aa'innames_list)#Falseprint('......
  • 2023.5.18——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • Python之元组 字典 集合
    Python列表Python之元组字典集合元组介绍元组的表现形式是tuple元组是一个不可变的序列(一般但这个数据不改变的时候,我们就采用元组,其余情况都用列表。)创建元组通过()创建元素tup=()print(tup,type(tup))()<class'tuple'>添加元素直接在元组中添加tup=()print(tup)tup......
  • Python之函数
    python元组,字典,集合Python之函数函数的简介函数也是一个对象函数可以用来保存可执行的代码,并且可以在需要是,对这些语句进行多次调用创建函数语法:>def函数名(形参1,形参2......):>代码块注意:函数名必须符合标识符的命名规范(可以包含字母、数字、下划线但是不......
  • python之基本数据类型
    搭建python环境python中的基本数据类型:1.表达式1.1表达式的概念:1.1.1表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以求得数值的有意义排列方法所得的组合1.2表达式的特点:1.2.1表达式一般仅仅用于计算一些结果,不会对程序产生实质性的影响1.2.2如果在交互模式......
  • python之列表
    python条件控制语句python之列表序列:一种数据结构指计算机中数据的存储方式有顺序通过索引加以操作序列的分类:可变的序列列表不可变的序列字符串列表列表的概念:是python中的一种对象,可以保存多个有序的数据。注意:索引是从零开始的,依次向下类推,并且每一个元素之间要用逗号......
  • Python之计算机要点
    Python之计算机要点:1.计算机的概念:计算机俗称电脑,是现代用于高速计算的机器特点:数值计算存储记忆功能逻辑计算总结:能够按照程序运行、自动、高速处理数据的现代化智能电子设备计算机的组成:硬件+软件软件:就是一系列按照特定顺序组织的计算机数据和特定指令的集合2.计算机语言:......
  • python之字符串和运算符
    python基本数据类型python之字符串和运算符字符串格式化字符串print(6+6)print('6'+'6')print('jerr'+'y')#print(6+'6')两个不同类型的相加会报一个类型错误1266jerry拼串s='hello'print('s='+s)用+号来进行拼串s=hello传递参数s=......