#身份证编号 51010619******2453
# -*- coding: utf-8 -*-
import re
def checkIdcard(idcard):
a = 0
Errors=['验证通过!','身份证号码位数不对!','身份证号码出生日期超出范围或含有非法字符!','身份证号码校验错误!','身份证地区非法!']
idcard=str(idcard)
idcard=idcard.strip()
idcard_list=list(idcard)
if(len(idcard)==18):
#出生日期的合法性检查
#闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
#平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if(int(idcard[6:10]) % 4 == 0 or (int(idcard[6:10]) % 100 == 0 and int(idcard[6:10])%4 == 0 )):
ereg=re.compile('[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$')#//闰年出生日期的合法性正则表达式
else:
ereg=re.compile('[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$')#//平年出生日期的合法性正则表达式
#//测试出生日期的合法性
if(re.match(ereg,idcard)):
#//计算校验位
S = (int(idcard_list[0]) + int(idcard_list[10])) * 7 + (int(idcard_list[1]) + int(idcard_list[11])) * 9 + (int(idcard_list[2]) + int(idcard_list[12])) * 10 + (int(idcard_list[3]) + int(idcard_list[13])) * 5 + (int(idcard_list[4]) + int(idcard_list[14])) * 8 + (int(idcard_list[5]) + int(idcard_list[15])) * 4 + (int(idcard_list[6]) + int(idcard_list[16])) * 2 + int(idcard_list[7]) * 1 + int(idcard_list[8]) * 6 + int(idcard_list[9]) * 3
Y = S % 11
M = "F"
JYM = "10X98765432"
M = JYM[Y]#判断校验位
if(M == idcard_list[17]):#检测ID的校验位
print(idcard)
print (Errors[0])
a = 1
else:
print (Errors[3])
else:
print (Errors[2])
else:
print (Errors[1])
return a
def brute_id():
s1 = '51010619'#身份证前6位
s2 = ['5','6','7','8']#身份证 年份 十位 在5-8区间
s3 = ['0','1','2','3','4','5','6','7','8','9']#身份证 年份 个位 0-9
s4 = ['01','02','03','04','05','06','07','08','09','10','11','12']#月份 01 -12
s5 = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31']#日期 01-31
s6 = '2453'#身份证后4位
s=[]
i = 0
a = ''
for i_s2 in s2:
id = s1+i_s2
id_1 = id
for i_s3 in s3:
id = id_1
id = id + i_s3
id_2 = id
for i_s4 in s4:
id = id_2
id = id+i_s4
id_3 = id
for i_s5 in s5:
id = id_3
id = id + i_s5 +s6
s.append(id)
return s
if __name__ == "__main__":
s = brute_id()
print(len(s))
s1=[]
for cdcard in s:
if checkIdcard(cdcard):
s1.append(cdcard)
print(s1)
print (len(s1))
python 小应用 隐藏身份证号码猜解
猜你喜欢
转载自blog.csdn.net/blackj_liuyun/article/details/80058720
今日推荐
周排行