m0_58055023
2021-06-08 20:17
采纳率: 100%
浏览 24

求求各位python大佬,这题咋做啊

从键盘输入一个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日,显示此人的性别。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 已采纳
    点赞 评论
  • 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]))

    点赞 评论
  • 有问必答小助手 2021-06-09 15:22

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 评论

相关推荐 更多相似问题