利用Python查出完整的身份證號碼!

利用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

發佈了112 篇原創文章 · 獲贊 35 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章