检验身份证号代码正确完整代码
时间: 2023-11-12 16:54:12 浏览: 89
判断身份证号码是否正确
5星 · 资源好评率100%
以下是Python代码示例,用于检验身份证号码是否正确和完整:
```python
def check_id_card(id_card):
if not id_card.isdigit() or len(id_card) != 18:
return False
# 校验前17位是否为数字
if not id_card[:17].isdigit():
return False
# 校验最后一位是否为数字或者 X
if not (id_card[-1].isdigit() or id_card[-1] == 'X'):
return False
# 校验身份证号码的前两位是否为合法的省份代码
province_code = id_card[:2]
if province_code not in PROVINCE_CODES:
return False
# 校验身份证号码的出生日期是否合法
birth_date_str = id_card[6:14]
if not is_valid_birth_date(birth_date_str):
return False
# 校验身份证号码的最后一位是否正确
if not is_valid_check_digit(id_card):
return False
return True
# 合法的省份代码
PROVINCE_CODES = [
'11', '12', '13', '14', '15', '21', '22', '23', '31', '32',
'33', '34', '35', '36', '37', '41', '42', '43', '44', '45',
'46', '50', '51', '52', '53', '54', '61', '62', '63', '64',
'65', '71', '81', '82'
]
# 校验出生日期是否合法
def is_valid_birth_date(birth_date_str):
try:
birth_date = datetime.datetime.strptime(birth_date_str, '%Y%m%d')
return True
except ValueError:
return False
# 校验身份证号码的最后一位是否正确
def is_valid_check_digit(id_card):
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
check_sum = sum([int(id_card[i]) * factors[i] for i in range(17)])
check_digit = (12 - check_sum % 11) % 11
if check_digit == 10:
check_digit = 'X'
return str(check_digit) == id_card[-1]
```
其中,`check_id_card` 函数接受一个身份证号码作为输入,返回一个布尔值表示该身份证号码是否正确和完整。该函数会检验身份证号码的各个部分是否符合规范,包括前17位是否为数字、最后一位是否为数字或 X、省份代码是否合法、出生日期是否合法以及身份证号码的最后一位是否正确。
`is_valid_birth_date` 函数用于校验身份证号码的出生日期是否合法,该函数会将出生日期字符串转换为 datetime 对象并检查是否出现 ValueError 异常。
`is_valid_check_digit` 函数用于校验身份证号码的最后一位是否正确。该函数会根据身份证号码的前17位和一个固定的系数列表计算出一个校验和,然后用该校验和除以 11 取余数,最后根据余数计算出一个校验位。如果校验位为 10,则用 X 表示。最后,将计算得到的校验位与身份证号码的最后一位进行比较,如果相同则返回 True,否则返回 False。
阅读全文