众所周知身份证号码有18位,而第18是根据前面17位数字按照一定的算法得出的。一般情况人们会隐藏身份证号码中的出生月日4位号码,显然根据该算法可以破解出被隐藏的4位号码,可以编写代码验证
代码如下:
# 获取日期列表mmdd格式
mmdd = []
for m in range(1, 13):
for d in range(1, 32):
mmdd.append('%02d%02d' % (m, d))
temp = ['0229', '0230', '0231', '0431', '0631', '0931', '1131']
for i in temp:
mmdd.remove(i)
# 身份证号码验证
def id_check(ID):
# ID值为str
if len(ID) != 18:
print('输入错误的身份证号码')
else:
id_code = ID[17] # 校验码
q = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
id_num = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
total = 0
for i in range(len(q)):
total = total + (int(ID[i]) * q[i])
id_mod = total % 11
if id_num[id_mod] == id_code:
print('该身份证号码已验证:' + ID)
# return ID
# else:
# print('该身份证号码错误,正确为:', (ID[:-1] + id_num[id_mod])) # 错误的输出正确号码
def main(id):
id_year = int(id.split('****')[0][-4:]) # 身份证年份
mmdd_1 = mmdd[:]
if (id_year % 4): # 判断闰年,因1900年出生的人没有身份证号,故不做考虑
pass
else:
mmdd_1.append('0229')
for i in mmdd_1:
ID = id.replace('****',i)
id_check(ID)
if __name__ == '__main__':
id = '5104021998****0110'
# id_check('510402199812240110') # 验证单个号码是否正确
main(id)
运行结果如下:
该身份证号码已验证:510402199801090110
该身份证号码已验证:510402199801170110
该身份证号码已验证:510402199801250110
该身份证号码已验证:510402199802050110
该身份证号码已验证:510402199802130110
该身份证号码已验证:510402199802210110
该身份证号码已验证:510402199803010110
该身份证号码已验证:510402199803280110
该身份证号码已验证:510402199804080110
该身份证号码已验证:510402199804160110
该身份证号码已验证:510402199804240110
该身份证号码已验证:510402199805040110
该身份证号码已验证:510402199805120110
该身份证号码已验证:510402199805200110
该身份证号码已验证:510402199806190110
该身份证号码已验证:510402199806270110
该身份证号码已验证:510402199807070110
该身份证号码已验证:510402199807150110
该身份证号码已验证:510402199807230110
该身份证号码已验证:510402199807310110
该身份证号码已验证:510402199808030110
该身份证号码已验证:510402199808110110
该身份证号码已验证:510402199809180110
该身份证号码已验证:510402199809260110
该身份证号码已验证:510402199810050110
该身份证号码已验证:510402199810130110
该身份证号码已验证:510402199810210110
该身份证号码已验证:510402199811010110
该身份证号码已验证:510402199811280110
该身份证号码已验证:510402199812080110
该身份证号码已验证:510402199812160110
该身份证号码已验证:510402199812240110
免责声明:以上代码仅供学习使用,任何个人、组织利用本代码从事任何非法活动均与本人无关。