如何根据身份证号码自动提取个人信息
身份证号码在每位公民的生活中具有不可替代的作用,除了作为身份的象征外,它还蕴含着大量关键的个人信息,例如出生日期、年龄、性别及属相等。本文将详细讲解如何通过身份证号码实现自动化提取这些信息,并提供具体的实现步骤和示例代码。
一、身份证号码结构解析
中国居民身份证号码共分为18位数字(更新前为15位,自2004年起全面发放18位号码)。其基本结构解析如下:
- 前六位(地址码):标识持证人的户籍省、市、区。

- 第七至十四位(出生日期):以YYYYMMDD格式表示,涵盖具体的年份、月份和日期信息。
- 第十五至十七位(顺序码):用于区分同一地区及同一天出生的人员,最后一位也是性别标识,奇数为男性,偶数为女性。
- 第十八位(校验码):依据特定算法生成,用于验证身份号码的合法性与准确性。
通过了解上述结构,我们可以逐步提取出需要的信息。
二、提取个人信息的步骤
1. 提取出生日期
从身份证号码中提取出生日期的操作非常直接,只需截取第七到第十四位的数字并格式化。例如:
```python
id_number = "110101199003078888" 示例身份证号码
birth_date = id_number[6:14] 提取出19900307
year, month, day = birth_date[:4], birth_date[4:6], birth_date[6:8]
formatted_birth_date = f"{year}-{month}-{day}" 格式化为YYYY-MM-DD
```
2. 计算年龄
计算年龄稍显复杂,需要将当前日期与出生日期进行比较。可以利用Python的`datetime`库来处理:
```python
from datetime import datetime
current_date = datetime.now
birth_date_obj = datetime.strptime(formatted_birth_date, "%Y-%m-%d")
age = current_date.year - birth_date_obj.year - ((current_date.month, current_date.day) < (birth_date_obj.month, birth_date_obj.day))
```
3. 提取性别
性别的提取相对简洁,只需判断身份证号码的第十七位(顺序码):
```python
gender_code = int(id_number[16]) 第十七位
gender = "女" if gender_code % 2 == 0 else "男"
```
4. 计算属相
属相是依据出生年份来推算的。中国的十二生肖依次为:鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪。计算方法为将出生年份减去4后对12取余:
```python
zodiac_animals = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]
birth_year = int(year)
zodiac_index = (birth_year - 4) % 12 1864年为鼠年,鼠年为4
zodiac = zodiac_animals[zodiac_index]
```
5. 汇总信息
最终,将提取所得的信息进行汇总并打印输出,代码如下:
```python
print(f"出生日期: {formatted_birth_date}")
print(f"年龄: {age}岁")
print(f"性别: {gender}")
print(f"属相: {zodiac}")
```
三、完整代码示例
将上述所有步骤整合,形成一个完整的身份证信息提取程序:
```python
from datetime import datetime
def extract_info_from_id(id_number):
提取出生日期
birth_date = id_number[6:14]
year, month, day = birth_date[:4], birth_date[4:6], birth_date[6:8]
formatted_birth_date = f"{year}-{month}-{day}"
计算年龄
current_date = datetime.now
birth_date_obj = datetime.strptime(formatted_birth_date, "%Y-%m-%d")
age = current_date.year - birth_date_obj.year - ((current_date.month, current_date.day) < (birth_date_obj.month, birth_date_obj.day))
提取性别
gender_code = int(id_number[16])
gender = "女" if gender_code % 2 == 0 else "男"
计算属相
zodiac_animals = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]
birth_year = int(year)
zodiac_index = (birth_year - 4) % 12
zodiac = zodiac_animals[zodiac_index]
输出信息
print(f"出生日期: {formatted_birth_date}")
print(f"年龄: {age}岁")
print(f"性别: {gender}")
print(f"属相: {zodiac}")
示例身份证号码
id_num = "110101199003078888"
extract_info_from_id(id_num)
```
四、总结
通过身份证号码,我们可以轻松而快速地提取个人的出生日期、年龄、性别和属相等重要信息。这为我们在实际应用中提供了巨大的便利,同时也为数据的处理和分析奠定了良好的基础。在工作实践中,这项技术广泛应用于身份验证、用户信息管理等多个领域。展望未来,随着数据科学与机器学习的不断进步,我们有理由相信,该提取和处理技术将变得更加智能和高效。
评论 (0)