科普:身份證號為什麼不會重複?

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


科普:身份證號為什麼不會重複?

身份證號裡的小知識

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

1.按地域劃分。每個人出生都有一個出生地,某個省市,某個區縣,總會有一個地點,一塊空間,具體到身份證號裡,前幾位所代表的正是每個人所在的空間。

2.按時間劃分。每個人都有生日,生日代表著什麼?如何把時間看做一條長河,那麼你的生日就是上岸的那一刻岸的位置,可能這個位置這一刻有很多人上岸,但對於你個人只有一個位置,毋庸置疑。在身份證號裡中間幾位年月日就是這個時間點的體現。

3.有序數字。就如你去吃飯等座,你會先領取一個號,從1到100,依次有序的加一,你所領取的這個號,在你吃飯之前肯定是唯一的,身份證號後幾位即可與此類比。

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

身份證號碼的規則

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

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

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

第十七位代表性別,奇數為男,偶數為女。

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


科普:身份證號為什麼不會重複?


身份證號裡校驗碼的意義

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


// 左移 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地址準確找到你的服務器,是怎麼實現的呢?其實與身份證號生成流程是一致的,都是要有一箇中心化的機構去做分發地址這件事,這個計算機世界裡這個中心化機構就是因特網信息中心。

為什麼真有人身份證號相同?

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


科普:身份證號為什麼不會重複?


這也說明中心機構的可靠性是保證身份證號唯一性的重要原因。


分享到:


相關文章: