当然可以,以下是一个简单的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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录