完整版python身份证号验证(第1版)

       在python中,你只要稍稍动动键盘,可能就会有一大波程序出来,比如今天小编想要分享的这款身份证号验证系统,此程序不想本站的其他博客,只能判断最后一位数字,我的这款验证器可以验证所有位数的身份号码。

一、身份证号前六位(地区代码)验证方法

       作者再次使用的是暴力查找法,先将全国三千多个区级代码存入一个rtf文件(小编使用的是rtf文件,txt、doc等文件都可以)。然后在程序中读取,如果前六位在其中,那么就算判断通过。

↓↓↓第一段代码↓↓↓

n = int(input("请输入身份证号前六位:"))
with open('file.rtf', 'r') as f:
    content = f.read()
    if str(n) in content:
        date = input("前六位正确,请输入身份证第七位到第十四位")

二、身份证号生日部分判断

这段的判断主要是判断是否为合法日期,程序如下

pingnian_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
            runnian_month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

            year = int(date[0:4])  # 截取年份
            month = int(date[4:6])  # 截取月份
            day = int(date[6:])  # 截取日期

            isRunNian = False
            # 判断是否是闰年
            if year % 4 == 0 and year % 100 != 0 and year % 400 == 0:
                isRunNian = True

            if month < 1 or month > 12:  # 判断月份是否合法
                print("您的身份证号有误,非法用户禁止进入!")
                
            if isRunNian:
                # 判断日期是否合法
                if day < 1 or day > pingnian_month[month]:
                    print("您的身份证号有误,非法用户禁止进入!")
            else:
                # 判断日期是否合法
                if day < 1 or day > runnian_month[month]:
                    print("您的身份证号有误,非法用户禁止进入!")
                    
            print("你输入的%s是有效日期" % date)

三、校验位判断(划重点!!)

最后一位的算法有点难,大家可以自己去搜索一下,这里就不详细展开了,具体链接在这里身份证倒数第一位算法

k = input("请输入身份证号倒数四位:")
            users += str(n) + date + k
            tot = 0
            chengshu = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
            yushu = ["1","0","X","9","8","7","6","5","4","3","2"]
            for i in range(0,17):
                a = int(users[i]) * chengshu[i]
                tot += a
            b = int(tot) % 11
            c = yushu[b]
            if c == users[17]:
                print("您的身份证号正确")
            else:
                print("您的身份证号有误,非法用户禁止进入!")

四、代码汇总

users = ""
n = int(input("请输入身份证号前六位:"))
with open('file.rtf', 'r') as f:
    content = f.read()
    if str(n) in content:
        date = input("前六位正确,请输入身份证第七位到第十四位")
        if len(date) == 8 and date.isdigit():
            
            
            pingnian_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
            runnian_month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

            year = int(date[0:4])  # 截取年份
            month = int(date[4:6])  # 截取月份
            day = int(date[6:])  # 截取日期

            isRunNian = False
            # 判断是否是闰年
            if year % 4 == 0 and year % 100 != 0 and year % 400 == 0:
                isRunNian = True

            if month < 1 or month > 12:  # 判断月份是否合法
                print("您的身份证号有误,非法用户禁止进入!")
                
            if isRunNian:
                # 判断日期是否合法
                if day < 1 or day > pingnian_month[month]:
                    print("您的身份证号有误,非法用户禁止进入!")
            else:
                # 判断日期是否合法
                if day < 1 or day > runnian_month[month]:
                    print("您的身份证号有误,非法用户禁止进入!")
                    
            print("你输入的%s是有效日期" % date)
            k = input("请输入身份证号倒数四位:")
            users += str(n) + date + k
            tot = 0
            chengshu = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
            yushu = ["1","0","X","9","8","7","6","5","4","3","2"]
            for i in range(0,17):
                a = int(users[i]) * chengshu[i]
                tot += a
            b = int(tot) % 11
            c = yushu[b]
            if c == users[17]:
                print("您的身份证号正确")
            else:
                print("您的身份证号有误,非法用户禁止进入!")
       
    else:
        print("您的身份证号有误,非法用户禁止进入!")
 

五、运行结果

身份证号真假性
110105202310010025
110105202313010025

有没有人能够看的出下面的身份证号错在哪里了吗?
 

本文章使用了noob_python以及数字化信息化智能化解决方案的作品,再次统一鸣谢!

还愣着干嘛呢,一键三连!!

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年11月6日
下一篇 2023年11月6日

相关推荐