将18 位身份证的前17 位,对应乘以以下值(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2),
并累加这些乘积为s,将s 对11 求余,结果为0-10,对应的末尾验证码为('1', '0', 'X', '9', '8','7', '6', '5', '4', '3', '2'),利用元组知识,实现用户可循环输入18 位身份证号码,输出身份证号码是否正确,输入“退出”,退出系统。
(1)输出结果格式,身份证号码不正确:
您输入的身份证号是xxxxxxxxx
您的身份证号码不正确,请重新输入
(2)输出结果格式,身份证号码正确:
您输入的身份证号是xxxxxxxxx
先生/女士,您的出生日期是xxxx 年xx 月xx 日(提示:身份证倒数第二位是奇数表示男,为偶数表示女,所以前面提示时,身份证为男的就显示“先生”,身份证为女的就显示为“女士”)
您的身份证号码是一个有效的身份证号码
def mistake():"""输入错误"""print("您输入的身份证号是"+id_number)print("您的身份证号码不正确,请重新输入")test1_tuple = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) # 身份证号验证权值
test2_tuple = ('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2') # 求余后末尾验证码
f = 1 # 循环标志
while f:id_number = input("请输入您的身份证号:")index = 0s = 0if id_number == "退出":f = 0 # 退出循环else:if len(id_number) == 18: # 判断是否18位for i in id_number[:17]: # 遍历前17位,验证其为数字并计算前17位加权乘积和stry:s = s + int(i) * int(test1_tuple[index])index = index + 1except:passtest = s % 11if id_number[17] == test2_tuple[test]: # 验证末尾验证码print("您输入的身份证号是"+id_number)if int(id_number[16]) % 2 == 0:print("女士,您的出生日期是"+id_number[6:10]+" 年"+id_number[10:12]+" 月"+id_number[12:14]+" 日")print("您的身份证号码是一个有效的身份证号码")else:print("先生,您的出生日期是"+id_number[6:10]+" 年"+id_number[10:12]+" 月"+id_number[12:14]+" 日")print("您的身份证号码是一个有效的身份证号码")else:mistake()passelse:mistake()