科普:身份證號爲何不會重複?

中國目前已經超過十三億人,一個巨大的數字,在如此龐大的人羣下,政府是如何有序管理的呢?衆所周知,每一個人都有一個惟一標識的身份證號,你是否想過會不會有一我的和你有相同的身份證號呢?思考一下是如何作到不重複的呢?javascript

身份證號裏的小知識

先來看看身份證號內包含了哪些元素。java

1.按地域劃分。每一個人出生都有一個出生地,某個省市,某個區縣,總會有一個地點,一塊空間,具體到身份證號裏,前幾位所表明的正是每一個人所在的空間。2.按時間劃分。每一個人都有生日,生日表明着什麼?如何把時間看作一條長河,那麼你的生日就是上岸的那一刻岸的位置,可能這個位置這一刻有不少人上岸,但對於你我的只有一個位置,毋庸置疑。在身份證號裏中間幾位年月日就是這個時間點的體現。3.有序數字。就如你去吃飯等座,你會先領取一個號,從1到100,依次有序的加一,你所領取的這個號,在你吃飯以前確定是惟一的,身份證號後幾位便可與此類比。服務器

我曾經思考過若是中國要出現一個和我有同樣的身份證號到底有多大的可能,算了一下後幾乎是不可能的。由於每一個人的身份證號前幾位由於本身的地域不一樣而各不相同,中間幾位生日不一樣也不相同,那若是要兩我的身份證號要相同須要具有什麼樣的條件呢?函數

身份證號碼的規則

在身份證號中,在前六位中第一到第二位肯定省級市,第三至第四肯定地級市,第五至第六肯定縣級市。ui

對於中間八位的規則:用戶的出生年月日,如你是1994年1月22日出生的,中間八位爲19940122。spa

第十五至十六位爲0-9之間的順序碼,00-99之間的數字。code

第十七位表明性別,奇數爲男,偶數爲女。orm

第十八位爲0-10(10用羅馬數字X代替)的校驗碼,並且這裏的校驗碼並不是隨機產生,而是由前十七位來決定的,他的計算公式以下:cdn


身份證號裏校驗碼的意義blog

校驗碼的存在就是檢查當前身份證號是否正確,下面是一個檢查身份證號的正確性的函數,有興趣的試試本身的身份證號。

// 左移 a << b 將 a 的二進制形式向左移 b (< 32) 比特位,右邊用0填充。
function checkId(id) {  
  if (typeof id === 'number') return '請輸入字符串類型的身份證號';  
  if(id.length !== 18) return '請輸入正確的身份證號';  
  let sum = 0;  
  for(let i=0; i<17; i++) {    
    sum += ((1 << (17 - i)) % 11) * id[i];  
  }  
  const n = (12 - (sum % 11)) % 11;  
  return n === Number(id[17]) || id[17] === 'X';
}複製代碼

算算身份證號重複的機率

若是要兩我的身份證號相同,首先要保證兩我的在同一個地區保證身份證號前六位相同,接下來須要有相同的生日,保證中間八位相同 ,還剩下最後四位,而最後一位校驗碼的出現是取決於前17位的,因此只有第十五到十七位三個數字是可變化的,那能承載多少人呢?

第十五位和十六位爲隨機數,都可出現10中可能,第十七位因爲性別奇偶之分,只有5中可能,因此可得出下面的算式。

男性:10 * 10 * 5 = 550

女性:10 * 10 * 5 = 550

我是男性,從上面能夠看出來,若是在我所出生的區(身份證前六位精確到區縣)而且在我出生的那一天有501個男孩出生,若是保證身份證位數恆定18位不增長且只容許數字狀況下,確定有兩我的要撞身份證號,因此與我撞身份證號的可能性即爲五百分之一。

現實數據統計

我查了一些資料,中國2018年整年出生人口1523萬人,2017年出生人口約爲1723萬,2016年約爲1786萬,這裏就當作每一年出生人口爲1700萬,中國一共有超過2800多個縣區,那咱們來算一算大概一個區縣天天平均有多少人出生呢?

17000000/365/2800 = 16.63

平均天天每一個區縣有17個新生兒,有一些人口密集的地方超平均數10倍或者20倍,也可看出來也離500個差距甚遠,因此可得出結論基本沒有可能兩我的身份證號會相同,若是人口真到很是龐大的時候 ,身份證號也會相應增長位數或者引入英文字母來規避號碼相同的問題。

中心化機構

這裏從上面身份證號關於重複的計算能夠看出,先有了戶籍管理部門來制定好一些規則,而後地方的實施者(派出所)再按照規則去生成每一個人的身份證號,在這裏拋出了最關鍵的一個點,中心化的戶籍部門。

在計算機世界裏,咱們都知道每一個能訪問到的服務器都有一個惟一標識IP地址,你能經過IP地址準確找到你的服務器,是怎麼實現的呢?其實與身份證號生成流程是一致的,都是要有一箇中心化的機構去作分發地址這件事,這個計算機世界裏這個中心化機構就是因特網信息中心。

爲何真有人身份證號相同?

其實生活中確實存在着身份證號相同的問題,在互聯網還不是很是普及的時候,各地的派出所沒有聯網條件,也沒辦法查該身份證號是否存在,都是靠人來記錄的,因此會致使極少一部分人員出現身份證號重複的問題。

這也說明中心機構的可靠性是保證身份證號惟一性的重要緣由。

思考

最後思考一下,若是沒有中心化機構了,咱們又該怎麼作相似身份證號的惟一標識呢?請看下一篇,無中心化機構,計算機世界的惟一標識是如何生成之UUID?


如上內容均爲本身總結,不免會有錯誤或者認識誤差,若有問題,但願你們留言指正,以避免誤人,如有什麼問題請留言,會盡力回答之。若是對你有幫助不要忘了分享給你的朋友或者點擊右下方的「在看」哦!也能夠關注做者,查看歷史文章而且關注最新動態,期待你的關注哦!

相關文章
相關標籤/搜索