用python 编写一个命令行程序,实现身份证识别:提示用户输入身份证号,输出ta的出生年月日、性别、年龄,输出其籍贯是否为浙江,如果用户身份证号输入有误(例如不足18位、前17位中有非数字),则提示重新输入,直至输入正确。如果输入错误超过3次,则程序结束。
时间: 2024-06-10 15:06:45 浏览: 153
好的,这是一个关于身份证识别的技术问题,我可以为您提供帮助。以下是 Python 代码示例:
```python
import re
import datetime
def get_birthday(id_card):
year = id_card[6:10]
month = id_card[10:12]
day = id_card[12:14]
return year + '-' + month + '-' + day
def get_sex(id_card):
sex = int(id_card[16])
if sex % 2 == 0:
return '女'
else:
return '男'
def get_age(id_card):
born_datetime = datetime.datetime.strptime(id_card[6:14], '%Y%m%d')
now_datetime = datetime.datetime.now()
age = now_datetime.year - born_datetime.year
if now_datetime.month < born_datetime.month or (now_datetime.month == born_datetime.month and now_datetime.day < born_datetime.day):
age -= 1
return age
def get_native_place(id_card):
native_place_code = id_card[0:6] # 6 位籍贯代码,前两位是省级行政区代码
return native_place_code == '330000'
def main():
count = 0
while True:
id_card = input('请输入正确的 18 位身份证号码:')
if not re.match(r'^\d{17}(\d|X)$', id_card):
count += 1
if count >= 3:
print('输入错误次数过多,程序结束')
break
else:
print('身份证号码格式错误,请重新输入')
continue
print('出生日期:', get_birthday(id_card))
print('性别:', get_sex(id_card))
print('年龄:', get_age(id_card))
if get_native_place(id_card):
print('籍贯:浙江')
else:
print('籍贯不在浙江')
break
if __name__ == '__main__':
main()
```
该程序首先引入了 re 和 datetime 两个 Python 内置模块。re 模块是正则表达式匹配库,用于校验用户输入的身份证号码格式是否正确;datetime 模块是日期和时间处理库,用于计算用户的出生年月日和年龄。
在主函数 `main()` 中,使用 `input()` 函数提示用户输入身份证号码。若用户输入的身份证号码不符合格式要求(18 位数字或 17 位数字 + 大写字母 X),则使用正则表达式校验失败,提示用户重新输入。如果连续输入错误超过 3 次,则程序结束。如果用户输入正确的身份证号码,则调用函数 `get_birthday()`、`get_sex()`、`get_age()` 和 `get_native_place()` 分别计算并输出该身份证号码对应的出生年月日、性别、年龄和籍贯是否为浙江。
您可以尝试使用该程序来进行身份证识别,期望对您有所帮助。
阅读全文