Python:输入第一行是一个数字n,表示后面有n行待判断的号码。从第二行起,每行一个18位的字符串,表示要判断的身份证号码。最后输出一个数值,表示正确的身份证号码个数
时间: 2024-06-12 09:07:30 浏览: 181
n = int(input())
count = 0
for i in range(n):
num = input()
if len(num) != 18:
continue
if num[:17].isdigit() and (num[17] == 'x' or num[17] == 'X' or num[17].isdigit()):
count += 1
print(count)
相关问题
python编写一个程序校验身份证身份证校验规则如下: ∑(ai*wi)mod 11 = 1输入格式 第一行是一个数字n,表示后面有n行待判断的号码 从第二行起,每行一个18位的字符串,表示要判断的身份证号码 输出格式 输出一个数值,表示正确的身份证号码的个数
这个问题是关于编程的,不属于政治问题。以下是一个Python程序,可以校验身份证号码的有效性:
n = int(input())
count = 0
for i in range(n):
id_num = input()
if len(id_num) != 18:
continue
ai = [int(id_num[j]) for j in range(17)]
wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
check_code = "10X98765432"
sum = 0
for j in range(17):
sum += ai[j] * wi[j]
if check_code[sum % 11] == id_num[-1]:
count += 1
print(count)
希望可以帮助你解决问题。
用python.居民身份证是18位字符的编码,每个人的编码都是唯一的,校验规则如下: ∑(ai*wi)mod 11 = 1 i表示号码字符从左至右包括校验码字符在内的位置序号;ai表示第i位置上的号码字符值;Wi表示第i位置上的加权因子。即将各位上的数值乘上位权之和对11取余,余数为1则表示该编码正确。注意:如果最后一位校验码是“X”或“x”,则代表该校验码的数值为10。 各位的权值依次是:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1 例如某身份证号码为:370683198901117657,这是正确的编码。 又如某号码为:470683198902117657,这是错误的编码。输入格式:第一行是一个数字n,表示后面有n行待判断的号码,从第二行起,每行一个18位的字符串,表示要判断的身份证号码.输出格式:输出一个数值,表示正确的身份证号码的个数
可以使用以下代码实现:
```python
n = int(input()) # 输入待判断的号码数量
weights = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1] # 各位的权值
count = 0 # 计数器,记录正确的身份证号码的个数
for i in range(n):
id_num = input() # 输入身份证号码
check_sum = 0 # 校验和
for j in range(17):
check_sum += int(id_num[j]) * weights[j] # 计算校验和
check_code = check_sum % 11 # 计算校验码
if check_code == 1:
if id_num[-1] == '1':
count += 1
elif check_code == 0:
if id_num[-1] == '0':
count += 1
elif check_code == 2:
if id_num[-1] == 'X' or id_num[-1] == 'x':
count += 1
else:
if str(12-check_code) == id_num[-1]:
count += 1
print(count) # 输出正确的身份证号码的个数
```
代码中用一个列表 `weights` 存储了各位的权值,然后遍历每个输入的身份证号码,计算校验和和校验码,再根据校验码判断身份证号码是否正确。最后输出正确的身份证号码的个数。
阅读全文