这篇文章,我们继续写身份证的信息核验。
上一篇文章,我们已经写了出生日期的相关的核验,这部分我们讲最后的核验码是如何核验的。
一 程序目标
- 判断前17位是否全是数字
- 计算并判断第18位的校验码是否正确
二 程序知识点
三 程序代码
下面的代码是在上篇文章的基础上增加的
# 判断前17位是否全是数字
if not s[:18].isdigit():
print("前17位不全是数字!")
returnPython#判断第18位的校验码
list1 = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
# 计算前17位的和
sum1 = 0
for i in range(17):
sum1 += int(s[i]) * list1[i]
m = sum1 % 11 #求余数
dict1 = {
0:'1',1:'0',2:"X",3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'
}
if s[-1] != dict1[m]:
print("第18位校验码不正确!")
return
print("身份证号码正确!")Python全部源代码
'''
# 判断前17位是否全是数字
顺序码,第 17 位用于区分性别,奇数代表男性,偶数代表女性。
第18位,校验码
'''
def getday(year,month):
list1 = [31,28,31,30,31,30,31,31,30,31,30,31]
if month==2:
if year%4==0 and year%100!=0 or year%400==0:
return 29
return list1[month-1]
def main():
# 输入身份证号码
s = input("请输入身份证号码:")
# 核验是否是18位
n = len(s)
if n!=18:
print("身份证号码位数不正确!")
return
# 判断前17位是否全是数字
if not s[:18].isdigit():
print("前17位不全是数字!")
return
# 判断出生日期是否正确!
year = int(s[6:10])
month = int(s[10:12])
day = int(s[12:14])
if year>2026 or year<1900:
print("年份不正确!")
return
elif month<1 or month>12:
print("月份输入不正确!")
return
elif day<1 or day>getday(year,month):
print("日期输入不正确!")
return
#判断第18位的校验码
list1 = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
# 计算前17位的和
sum1 = 0
for i in range(17):
sum1 += int(s[i]) * list1[i]
m = sum1 % 11 #求余数
dict1 = {
0:'1',1:'0',2:"X",3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'
}
if s[-1] != dict1[m]:
print("第18位校验码不正确!")
return
print("身份证号码正确!")
# 112233200010108901
while True:
main()
Python四 视频讲解
程序的编写过程和讲解见下面链接
https://www.bilibili.com/video/BV1y1wjzCETZ
