1.首先,准备工作:
(1).Z值和效验码可以用字典包括。(\表示换行继续输出(如果一行代码还没写完但又太长的话可以这么干))
ma = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', \ 7: '5', 8: '4', 9: '3', 10: '2'}
(2).权重可以用列表包括,这样到时候循环时和对应数值相乘会更方便。
quan = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
(3).由于系统每输入一次就可以立即判断是否满足要求,所以不满足的我们可以将其存入一个列表中
命名如下:
uneffective = []
2.接受数据即判断数据是否符合要求
(1).第一行为输入的身份证号码的个数:
num = int(input())
(2).接着循环接受身份证号码
1. for i in range(num): 2. number = list(input())
(3).检查前十七位字符是否全部为数字
可以用try和except来完成这一任务。
我们先创建列表ber = number[:-1](用于接收列表number前十七字符重新组成新列表)
ber = num[:-1]
但是我们还没检查,检查我们可以将新列表ber的所有字符转化为int型,如果不能转化报错,那么说明number不满足要求,直接跳转到except部分代码continue结束当次循环。
所以代码如下:
for i in range(num): number = list(input()) try: ber = list(map(int, number[:-1])) '''map函数可以将列表迭代,这里用int()方法处理,使每个元素转化为int型,再将其组成一个列表。''' s = 0 except: # 如果如果不是数字,就会程序出错,那么跳转到这里 uneffective.append(number) # 该身份证号码不满足要求。 continue
(4).检查权重和取余与效验码是否匹配
可以使用循环,因为是17位数字,所以循环17次。
1. for i in range(17): 2. s += ber[i] * quan[i] # s需要在前面初始化为0 3. s %= 11
判断是否匹配一致
1. if ma[s] != number[-1]: 2. uneffective.append(number) # 如果不等于,则不符合要求,append!
3.最后判断是否All passed
if len(uneffective) != 0: for i in uneffective: print(''.join(i)) else: print('All passed')
4.完整代码
num = int(input()) ma = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', \ 7: '5', 8: '4', 9: '3', 10: '2'} quan = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] uneffective = [] for i in range(num): number = list(input()) try: ber = list(map(int, number[:-1])) s = 0 except: uneffective.append(number) continue for i in range(17): s += ber[i] * quan[i] s %= 11 if ma[s] != number[-1]: uneffective.append(number) if len(uneffective) != 0: for i in uneffective: print(''.join(i)) else: print('All passed')