用python 编写程序,编写一个函数,提取有效的 18 位身份证号码,从中提取出生日期,并以“出生日期是**** 年**月**日-年龄为**岁”的格式输出。。用三种不同的方式
时间: 2023-07-23 14:46:57 浏览: 130
好的,我可以为您提供三种不同的方法来解决这个问题。
方法一:使用正则表达式
```python
import re
import datetime
# 方法一:使用正则表达式
def extract_birthdate(id_card):
pattern = r'^\d{17}(\d|X|x)$'
if re.match(pattern, id_card):
birthdate = datetime.datetime.strptime(id_card[6:14], '%Y%m%d')
age = (datetime.datetime.now() - birthdate) // datetime.timedelta(days=365)
return "出生日期是{}年{}月{}日-年龄为{}岁".format(birthdate.year, birthdate.month, birthdate.day, age)
else:
return "身份证号码不合法"
id_card = input("请输入18位身份证号码:")
result = extract_birthdate(id_card)
print(result)
```
方法二:使用切片和 datetime 模块
```python
import datetime
# 方法二:使用切片和 datetime 模块
def extract_birthdate(id_card):
if len(id_card) == 18:
birthdate = datetime.datetime.strptime(id_card[6:14], '%Y%m%d')
age = (datetime.datetime.now() - birthdate) // datetime.timedelta(days=365)
return "出生日期是{}年{}月{}日-年龄为{}岁".format(birthdate.year, birthdate.month, birthdate.day, age)
else:
return "身份证号码不合法"
id_card = input("请输入18位身份证号码:")
result = extract_birthdate(id_card)
print(result)
```
方法三:使用切片和 time 模块
```python
import time
# 方法三:使用切片和 time 模块
def extract_birthdate(id_card):
if len(id_card) == 18:
birthdate = time.strptime(id_card[6:14], '%Y%m%d')
age = (time.time() - time.mktime(birthdate)) // (365 * 24 * 60 * 60)
return "出生日期是{}年{}月{}日-年龄为{}岁".format(birthdate.tm_year, birthdate.tm_mon, birthdate.tm_mday, age)
else:
return "身份证号码不合法"
id_card = input("请输入18位身份证号码:")
result = extract_birthdate(id_card)
print(result)
```
以上三种方法都可以得到正确的结果,即提取有效的18位身份证号码,从中提取出生日期,并以“出生日期是**** 年**月**日-年龄为**岁”的格式输出。其中第一种方法使用正则表达式,第二种方法使用切片和 datetime 模块,第三种方法使用切片和 time 模块。
阅读全文