题目
程序设计题:身份证的编码问题。中国大陆居民身份证号码由18位数字组成:第1至6位的数字为地址代码,表示某省某市某区或县;第7至14位的数字代表居民的出生年月日;第15至17位的数字代表同一辖区内、同年同月同日出生的顺序号,其中第17位数字表示性别,奇数为男性,偶数为女性;第18位数字代表校验码。校验码是0~10这十个数字中的任意一个,其中10用X表示。
校验码的计算方法如下:
①将身份证号码的前17位数字分别乘以对应的系数。对应关系如下:
号码位
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
系数
7
9
10
5
8
4
2
1
6
3
7
9
10
5
8
4
2
②将17位数字和系数相乘的结果累计求和;
③用所求的和除以11得到余数;
④用余数与身份证号码的最后一位校验码进行对应,对应关系如下:
余数
0
1
2
3
4
5
6
7
8
9
10
校验码
1
0
X
9
8
7
6
5
4
3
2
(1)
小明身份证号码的前17位为33900520020808621,则他的第18位校验码为 。
(2)
小明想设计一个Python程序用于身份证号码验证,实现如下功能:输入身份证号码,输出出生日期、性别,实现判断最后一位校验码是否正确。部分程序代码如下所示,请补全代码并上机调试。
ID=input("请输入十八位身份证号码: ")#输入身份证号码
sex={0:"女",1:"男",2:"女",3:"男",4:女,5:"男": 6:"女",7:"男"."8:"女",9:"男"}
ID_ birth=ID[6:14]
ID_ sex=ID[16]
ID_ check=ID[17]
#求出year,month,day
①
print("出生日期: "+year+"年"+ month+"月"+day+"日")
print("性别:", ② )
ID=list(ID) #把字符串转成列表
ID=list(map(int, ID[0:17])) #把前17个元素转成整型
ID_ CHECK=["1","0'","X'","9“,"8","7”,"6“,"5”,"4","3","2"]
③
#用列表存储每一位权值
#17位数字和系数相乘的结果累计求和
#求余数
#求验证码
print("验证码是否正确:", check-= =ID_check)
答案: 【1】4
①: year=ID_ birth[0:4] #求年份 month=ID_ birth[4:6] #求月份 day=ID_ _birth[6:8] #求日期 ②:sex[int(ID_ _sex)] ③: W=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] #每一位的权值 sum=ID[0]*W[0]+ID[1]*W[1]+ID[2]*W[2]+ID[3]*W[3]+ID[4]*W[4]\ #“\”表示换行,求和 +ID[5]*W[5]+ID[6]*W[6]+ID[7]*W[7]+ID[8]*W[8]+ID[9]*W[9]\ +ID[10]*W[10]+ID[1]*W[11]+ID[12]*W[12]+ID[13]*W[13]\ +ID[14]*W[14]+ID[15]*W[15]+ID[16]*W[16] yushu=sum%11 #求余数 check=ID_ CHECK[yushu] #求验证码 或其他等价答案。