从键盘输入一个18位身份证号,验证其正确性,如果错误,请重新输入。验证方面包括:
1、位数为18位;
2、前17位须为数字,第18位可以是数字及x或X;
3、首位不能为0;
4、月份的范围在01-12;
5、日的范围根据月份来判断,如1,3,5,7,8,10,12月中,日的范围为01-31;4,6,9,11月中,日的范围为01-30;2月,日的范围需要考虑闰年,闰年为29,非闰年为28;
正确输入身份证后,显示此人的出生日期,格式为:XXXX年XX月XX日,显示此人的性别。
参考这篇文章:https://blog.csdn.net/qq_41666983/article/details/104941331
import re
while True:
s = input('输入一个18位身份证号:')
if re.match(r'^[1-9]\d{16}[\dxX]$',s):
y = int(s[6:10])
m = int(s[10:12])
d = int(s[12:14])
p = 31 if m in (1,3,5,7,8,10,12) else 30
if m==2:
p = 29 if y%4==0 and y%100!=0 or y%400==0 else 28
if 1<=m<=12 and 1<=d<=p:
break
print('错误,请重新输入!')
print('{}年{}月{}日,性别{}'.format(s[6:10],s[10:12],s[12:14],['女','男'][int(s[16])%2]))
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632