Python新人,如何从很多身份号码中提取生日年月日?
要从很多身份号码中提取生日年月日,你可以使用 Python 的正则表达式(re
模块)来处理身份证号码,并提取出生日期。以下是一个示例代码,演示如何提取中国身份证号码中的出生日期:
示例代码
pythonimport re
def extract_birthday(id_number):
"""
从中国身份证号码中提取出生日期。
:param id_number: 身份证号码
:return: 出生日期(格式为 yyyy-mm-dd)
"""
# 正则表达式匹配身份证号码中的出生日期部分
pattern = r'(\d{6})(\d{8})'
match = re.search(pattern, id_number)
if match:
# 提取年份、月份和日期
birth_date = match.group(2)
year = birth_date[:4]
month = birth_date[4:6]
day = birth_date[6:8]
return f"{year}-{month}-{day}"
else:
return None
# 示例身份证号码
id_numbers = [
"110101199003078888", # 1990年3月7日
"310101198512100000", # 1985年12月10日
"440104197812305678" # 1978年12月30日
]
# 提取并打印所有身份证号码的出生日期
for id_number in id_numbers:
birthday = extract_birthday(id_number)
if birthday:
print(f"身份证号码: {id_number}, 出生日期: {birthday}")
else:
print(f"身份证号码: {id_number}, 出生日期: 无法提取")
代码解析
正则表达式模式:
(\d{6})
匹配身份证号码的前六位(地区码),(\d{8})
匹配身份证号码的出生日期部分(YYYYMMDD)。
提取出生日期:
- 使用
re.search
查找匹配的子串。 - 从匹配中提取出生日期的年月日部分,并格式化为
yyyy-mm-dd
格式。
- 使用
其他注意事项
- 身份证号格式: 这段代码假设身份证号格式为 15 位或 18 位。如果你处理的是 15 位身份证号码,可以先将其转换为 18 位格式。
- 合法性检查: 代码未检查身份证号的合法性,仅提取出生日期。如果需要验证身份证号的合法性,请额外处理。
- 生日范围: 确保提取的日期在有效范围内,避免无效的日期如 2023-02-30。
关键字
Python, 身份证号码, 出生日期, 正则表达式, re
模块, 提取信息, 格式化日期