600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别 根据以下

请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别 根据以下

时间:2022-06-18 05:20:25

相关推荐

请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别 根据以下

请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效。

第二代身份证号组成规则:

a) 身份证号码(18位)= 地址码(6)+ 出生日期码(8)+ 顺序码(3)+校验码(1);

b) 地址码:保证位数合法即可,无需校验合法性;

c) 出生日期码:格式为YYYYMMDD,需校验日期有效性;

d) 顺序码:男性为奇数,女性为偶数;

e) 校验码:

S = ∑(i = 1, 17) { A[i] * W[i] }

Y = S % 11

校验码 N = (12 - Y) % 11

所以N取值范围是0-10,10在身份证号码中用大写字母'X'表示

i:表示号码字符从右至左包括校验码字符在内的位置序号

A[i]:表示第i位置上的身份证号码字符值

W[i]:表示第i位置上的加权系数,其数列为7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

###################################################################################

card = input("请输入身份证号:")gender = input("请输入性别:男输1,女输2. :")a = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X"]cards = list(card) #转列表b = cards[:6] #取前6位数print("打印前6位数:%s"% b)d = card[6:14] #取身份8位数id = list(d) #字符串转列表print(type(id))print("打印身份证号%s"% id) #查看身份证号码是否正确c = card[14:17] # 判断男女生if card[0] == "0" or card[0] == cards[1] =="0":nums = int(cards[2])else:nums = int (c)N = cards[17] #检验码if len(cards) == 18 and set(b).issubset(set(a)) == True and id[0] == id[1] ==id[2] == id[3] and id[4] ==id[5] and id[6] == id[7] and set(N).issubset(set(a)) == True:if (nums % 2 == 0) and gender == "2":print ("女生")elif (nums % 2 != 0) and gender == "1":print ("男生")print(cards)str2= [str (i) for i in cards ] #列表转字符串ls3 = ''.join (str2)print("身份证号正确是:%s"% ls3)

请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别 根据以下规则输出号码是有效还是无效。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。