python穷举破解身份证隐藏号码

众所周知身份证号码有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

免责声明:以上代码仅供学习使用,任何个人、组织利用本代码从事任何非法活动均与本人无关。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容