可以写个处理身份证的代码吗
当然可以,以下是一个简单的Python代码示例,用于验证和提取中国大陆身份证号码的信息:
import re
import datetime
def validate_id_number(id_number):
"""
验证身份证号码是否正确
"""
if not re.match(r'^\d{17}(\d|X)$', id_number):
return False
# 校验码计算
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
checksums = '10X98765432'
s = sum(int(id_number[i]) * weights[i] for i in range(17))
if checksums[s % 11] != id_number[-1]:
return False
# 出生日期校验
birth_date = id_number[6:14]
try:
datetime.datetime.strptime(birth_date, '%Y%m%d')
except ValueError:
return False
return True
def extract_id_number_info(id_number):
"""
提取身份证号码中的信息
"""
if not validate_id_number(id_number):
return None
province_code = id_number[:2]
city_code = id_number[2:4]
area_code = id_number[4:6]
birth_date_str = id_number[6:14]
sex = int(id_number[-2]) % 2 == 1
birth_date = datetime.datetime.strptime(birth_date_str, '%Y%m%d').date()
return {
'province_code': province_code,
'city_code': city_code,
'area_code': area_code,
'birth_date': birth_date,
'sex': '男' if sex else '女',
}
使用示例:
id_number = '110101199003074872'
if validate_id_number(id_number):
info = extract_id_number_info(id_number)
print(info)
else:
print('身份证号码不正确')
输出结果:
{'province_code': '11', 'city_code': '01', 'area_code': '01', 'birth_date': datetime.date(1990, 3, 7), 'sex': '男'}
原文地址: https://www.cveoy.top/t/topic/E0K 著作权归作者所有。请勿转载和采集!