如何使用Python编写循环结构来验证身份证号码的合法性?
时间: 2024-10-08 10:03:05 浏览: 36
Python+Opencv身份证号码区域提取及识别实现
5星 · 资源好评率100%
在Python中,可以使用循环结构结合正则表达式来验证中国大陆的18位身份证号码是否合法。这里有一个基本的示例,我们将检查身份证号码的长度、校验码以及字符组成规则:
```python
import re
def is_valid_id(id_number):
# 身份证号码由18位数字和最后一位校验码组成
if len(id_number) != 18 or not id_number.isdigit():
return False
# 正则表达式检查身份证的格式
pattern = r'^\d{6}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\d{3}[0-9Xx]$'
if not re.match(pattern, id_number):
return False
# 计算校验码
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
weights = [1, 3, 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
sum_val = 0
for i in range(17):
sum_val += int(id_number[i]) * factors[i]
remainder = sum_val % 11
if remainder == 10 and id_number[17].upper() in ['X', 'Xx']:
check_digit = '1'
elif remainder <= 1:
check_digit = str(remainder)
else:
check_digit = str(11 - remainder)
# 比较计算出的校验码和实际的校验码
return id_number[-1] == check_digit
# 示例用法
id_to_test = "110101199001010012"
if is_valid_id(id_to_test):
print(f"{id_to_test} 是有效的")
else:
print(f"{id_to_test} 是无效的")
阅读全文