用python循环输入18位的身份证号码,取出其出生日期与性别,按如下格式显示: xxxx年xx月xx日 男 。当输入0时退出,输入错误重新输入
时间: 2023-12-21 11:07:30 浏览: 62
可以使用正则表达式来判断输入的身份证号是否符合规范,然后提取出生日期和性别。以下是示例代码:
```python
import re
import datetime
while True:
id_card = input("请输入18位身份证号码(输入0退出):")
if id_card == "0":
break
if not re.match(r"^\d{17}(\d|X)$", id_card):
print("身份证号码格式不正确,请重新输入!")
continue
birth_year = int(id_card[6:10])
birth_month = int(id_card[10:12])
birth_day = int(id_card[12:14])
gender = "男" if int(id_card[-2]) % 2 == 1 else "女"
birth_date = datetime.date(birth_year, birth_month, birth_day)
print("{}年{}月{}日 {}".format(birth_year, birth_month, birth_day, gender))
```
其中,`re.match()`函数用于判断输入的身份证号是否符合规范。正则表达式`^\d{17}(\d|X)$`表示字符串开头必须是17个数字,最后一位可以是数字或字母X,整个字符串长度为18位。
如果输入的身份证号码格式正确,就可以使用字符串切片来提取出生日期和性别。出生日期是身份证号码的第7到第14位(前6位是地址码和出生年月日的前两位),性别是身份证号码的倒数第2位,奇数表示男,偶数表示女。最后,使用`datetime.date()`函数将出生日期转换为`date`类型的对象,方便后续格式化输出。