在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以及数字化信息化智能化解决方案的作品,再次统一鸣谢!
还愣着干嘛呢,一键三连!!
文章出处登录后可见!
已经登录?立即刷新