python身份证验证
时间: 2023-11-07 21:04:44 浏览: 247
身份证验证的Python代码可以通过检查身份证号的长度和校验码是否正确来验证身份证的有效性。首先,检查身份证号的长度是否为18位,如果不是则提示只支持18位身份证号查询。然后,根据校验码规则将前17位分别乘以对应的权重,然后将17个乘积相加并取余数,得到一个0-10范围的数字,该数字与校验位数字对应关系如下:【1,0,x,9,8,7,6,5,4,3,2】,其中x表示校验码为10。如果校验位数字与身份证号的最后一位相符,则说明身份证号规则核验通过,并输出出生日期、性别和当地同性别同生日排名;否则,说明身份证号规则核验失败,并输出正确的校验码。
以下是一个示例的Python代码:
```python
def check_id_length(n):
if len(str(n)) != 18:
print("只支持18位身份证号查询")
return False
else:
return True
def check_id_data(n):
var = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
var_id = ['1','0','x','9','8','7','6','5','4','3','2']
n = str(n)
sum = 0
if int(n[16]) % 2 == 0:
gender = "女"
same = int(int(n[16]) / 2)
else:
gender = "男"
same = int((int(n[16]) + 1) / 2)
for i in range(0,17):
sum += int(n[i]) * var[i]
sum %= 11
if var_id[sum] == str(n[17]):
print("身份证号规则核验通过,校验码是:", var_id[sum])
print("出生于:", n[6:10], "年", n[10:12], "月", n[12:14], "日", "性别:", gender,"\n当地同性别同生日排名:", same)
return sum
else:
print("出生于:", n[6:10], "年", n[10:12], "月", n[12:14], "日", "性别:", gender,"\n当地同性别同生日排名:", same)
print("但身份证号规则核验失败,校验码应为", var_id[sum], ",当前校验码是:", n[17])
return 0
n = input("请输入18位身份证号:")
if check_id_length(n):
check_id_data(n)
else:
print("请重新输入")
```
请注意,以上代码仅提供一个示例,您可能需要根据自己的需求进行适当的修改和优化。
阅读全文