利用Python查出完整的身份證號碼!
Hack 1周前
以下文章來源於凹凸玩數據 ,作者朱小五
爲了一杯奶茶。
事情的經過是這樣的:
我的同事李大偉最近出差去了。
昨晚睡覺前翻了翻朋友圈,
就跟他愉快地 互懟 交流了起來。
估計是他想起了我朱小五從不打無把握之賭,後面就慫了。
一杯奶茶嘛,也可以接受,
像杰倫一樣快樂就好啦。
開工。
先看看李大偉的朋友圈中發的圖片。
(該火車票來自其他平行世界,掃描可能發生奇怪現象)
車票中暴露的個人信息爲:
3302211993****4914 李大偉
只缺少月份日期四位。
那麼也就是一共365種可能。
科普時間:
根據李大偉的身份證信息的前6位“330221”
輕易可得:
浙江省寧波人,1993年滴
那我先用python生成1993年的所有日期吧
import time
#生成出生當年所有日期
def dateRange(year):
fmt = '%Y-%m-%d'
bgn = int(time.mktime(time.strptime(year+'-01-01',fmt)))
end = int(time.mktime(time.strptime(year+'-12-31',fmt)))
list_date = [time.strftime(fmt,time.localtime(i)) for i in range(bgn,end+1,3600*24)]
return [i.replace('-','') for i in list_date]
data_time = dateRange('1993')
成功得到日期列表。
再用剛纔的校驗碼計算規則
反向驗證哪個日期符合嘍!
自己寫計算規則?
NONONO,太麻煩!
給大家隆重介紹一個庫:id-validator
安裝:pip install id-validator
可以用來驗證身份證號合法性、獲取身份證號信息、生成可通過校驗的假數據、身份證升級。
那麼我們利用 id-validator 來依次校驗剛纔生成的身份證號碼。
from id_validator import validator
#遍歷所有日期,print通過校驗的身份證號碼
def vali_dator(id1,id2,id3):
for i in dateRange(id2):
theid = id1 + i + id3
if validator.is_valid(theid):
print(theid)
vali_dator('330221','1993','4914')
運行結果:
額
有33個都符合校驗邏輯,這隻篩掉了90%啊
這就尷尬了
如何在33個日期中挑出來李大偉的真實出生日期呢?
思考了一下
(其實是百度了一波)
這裏需要我們每個人都用過的12306。
打開12306官網,
在12306添加常用聯繫人,
將李大偉+身份證號依次輸入。
若身份證和姓名一致,就會顯示校驗通過;
若不能通過,則說明身份證和姓名不一致。
最終可以測出李大偉的出生日期是:19930608
收工,
奶茶到手。
大家是不是想知道我到底試了多少次才成功的?
剛剛回來的李大偉也表示很想知道。
其實一次也沒用試。
現在我喝着李大偉買的奶茶
碼着文
打開釘釘
看着李大偉的暱稱
心裏笑出豬叫。
獲取相關代碼在後臺回覆:查查證
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 18 14:51:35 2019
@author: 朱小五
微信公衆號: 凹凸玩數據
哈哈還有一個:凹凸數讀
"""
import time
#生成出生當年所有日期
def dateRange(year):
fmt = '%Y-%m-%d'
bgn = int(time.mktime(time.strptime(year+'-01-01',fmt)))
end = int(time.mktime(time.strptime(year+'-12-31',fmt)))
list_date = [time.strftime(fmt,time.localtime(i)) for i in range(bgn,end+1,3600*24)]
return [i.replace('-','') for i in list_date]
data_time = dateRange('1993')
from id_validator import validator
#遍歷所有日期,print通過校驗的身份證號碼
def vali_dator(id1,id2,id3):
for i in dateRange(id2):
theid = id1 + i + id3
if validator.is_valid(theid):
print(theid)
vali_dator('330221','1993','4914')
#print(validator.get_info('330221199306084914'))
https://github.com/zpw1995/aotodata/tree/master/interest/ID_card