通過火車票還原身份證

2021-07-15 11:26:49 字數 1438 閱讀 6115

今天給大家演示如何通過一張火車票還原完整的身份證號碼。大家都知道火車票是可以得到姓名和不完整的身份證號碼,身份證有四位是打碼的,這樣就真的安全嗎?事實上通過一些簡單的方法就可以還原出來完整的身份證號碼。社工中我們會用的非常多,比如驗證密保問題,重置各種帳號密碼。

我又**了(:

進入正題,下圖是本次實驗使用的一張火車票。

要想還原打了碼的身份證號碼,首先得了解下身份證號碼的編碼。身份證號碼的前六位是地區碼,通過這六位可以得知乙個人的身份所在地。之後的八位是生日的年月日。後面的四位,其中最後乙個是檢驗位,倒數第二位可以區分性別,通常奇數為男性,偶數為女性。這就是編碼的基本資訊。可以參考我的另一篇部落格:身份證號碼驗證演算法

火車票上打碼的部分怎麼還原呢?

打碼的是生日的月份和日期,所以一共只有366種可能,而不是四位數對應的10000種,這是乙個弱點。如果遍歷,只需要遍歷最多366次就可以確定乙個人的身份證號。但是有辦法可以將這個數字再次減少,那就是通過校驗碼來去除部分檢驗失敗的號碼。檢驗演算法網路上有很多說明,是通過前17位號碼分別與一組數字相乘,然後模11得到餘數,就是最後一位的校驗碼。其中x表示10。所以通過檢驗可以排除10/11的日期,最終只剩下30多個可能的號碼。下圖是通過該方法獲取的所有34種可能的日期。

那麼在**驗證這剩下的30多個號碼呢?

其實12306上就可以。在「常用聯絡人」管理裡面。

在新增常用聯絡人的時候,如果姓名和身份證號碼不匹配,那麼就會出現「待驗證」的字樣,如果匹配,就會提示「已通過」,所以可以確定後端是有驗證介面的。

那麼只需要將這30多個可能的遍歷新增,就可以得到姓名對應的正確的身份證號碼了。運氣好的話,工作量很小,比如實驗中的只用了7次就確定了實驗所用的火車票的身份證號碼,運氣差最多也就是30多次。

得到的結果如下圖。可以看到生日已經還原出來了。

總結站在網際網路安全的角度上講,從實驗可以說明,火車票的打碼效果並不安全,12306的新增乘客驗證機制也需要限制。其實最後四位打碼的效果會好的多,姓名也是有必要打乙個字的星號的。12306新增聯絡人的地方應該限制同一姓名的驗證次數,失敗3次就不再驗證。而作為乘客的我們,一定要保護好自己的火車票的資訊,千萬不能隨手亂扔,或拍照不處理直接上傳到網際網路,以防圖謀不軌之人加以利用。

通過身份證號計算年齡

sfzhm 計算年齡複製 var sfzhm document.getelementbyid sfzhm value if sfzhm.length 15 var date1 new date 取得當前日期 var year1 date1.getfullyear 取得當前年份 var month1 ...

使用C 寫了乙個可以推算火車票身份證號碼的小程式

1.火車票上 號打的是月,日,理論上的有最大366種組合 2.校驗碼是ceftzbsbt最後的一位,0 9及x,11個結果 3.那麼,通過火車票上的身份證號,可以得到33個左右真正的有效身份證號 4.如果你能知道對方的星座 嗯,大家不是經常曝自己是什麼星座麼 那麼,再將這30多個結果對映到12個星座...

如何通過技術手段實現火車票實名制

春運是當今中國每年的大事,看著我們的兄弟姐妹每年為能回到溫暖的家 而付出的努力不禁唏噓不已。作為乙個it從業人員,僅從技術手段提出我的一些看法。1.實名制的可行性 從技術手段來看,火車售票的實名制完全是可以實現的,參照中國民航的實名售票可見。2.實名制的實施 理想的實名制要解決的是保證想要回家的人能...