(給算法愛好者加星標,修煉編程內功)
中國目前已經超過十三億人,一個巨大的數(shù)字,在如此龐大的人群下,政府是如何有序管理的呢?眾所周知,每個人都有一個唯一標識的身份證號,你是否想過會不會有一個人和你有相同的身份證號呢?思考一下是如何做到不重復的呢? 身份證號里的小知識先來看看身份證號內包含了哪些元素。
我曾經思考過如果中國要出現(xiàn)一個和我有一樣的身份證號到底有多大的可能,算了一下后幾乎是不可能的。因為每個人的身份證號前幾位因為自己的地域不同而各不相同,中間幾位生日不同也不相同,那如果要兩個人身份證號要相同需要具備什么樣的條件呢? 身份證號碼的規(guī)則在身份證號中,在前六位中第一到第二位確定省級市,第三至第四確定地級市,第五至第六確定縣級市。 對于中間八位的規(guī)則:用戶的出生年月日,如你是1994年1月22日出生的,中間八位為19940122。 第十五至十六位為0-9之間的順序碼,00-99之間的數(shù)字。 第十七位代表性別,奇數(shù)為男,偶數(shù)為女。 第十八位為0-10(10用羅馬數(shù)字X代替)的校驗碼,而且這里的校驗碼并非隨機產生,而是由前十七位來決定的,他的計算公式如下: 身份證號里校驗碼的意義 校驗碼的存在就是檢查當前身份證號是否正確,下面是一個檢查身份證號的正確性的函數(shù),有興趣的試試自己的身份證號。 // 左移 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'; } 算算身份證號重復的概率如果要兩個人身份證號相同,首先要保證兩個人在同一個地區(qū)保證身份證號前六位相同,接下來需要有相同的生日,保證中間八位相同 ,還剩下最后四位,而最后一位校驗碼的出現(xiàn)是取決于前17位的,所以只有第十五到十七位三個數(shù)字是可變化的,那能承載多少人呢? 第十五位和十六位為隨機數(shù),均可出現(xiàn)10中可能,第十七位由于性別奇偶之分,只有5中可能,所以可得出下面的算式。
我是男性,從上面可以看出來,如果在我所出生的區(qū)(身份證前六位精確到區(qū)縣)并且在我出生的那一天有501個男孩出生,如果保證身份證位數(shù)恒定18位不增加且只允許數(shù)字情況下,肯定有兩個人要撞身份證號,所以與我撞身份證號的可能性即為五百分之一。 現(xiàn)實數(shù)據(jù)統(tǒng)計我查了一些資料,中國2018年全年出生人口1523萬人,2017年出生人口約為1723萬,2016年約為1786萬,這里就當做每年出生人口為1700萬,中國一共有超過2800多個縣區(qū),那我們來算一算大概一個區(qū)縣每天平均有多少人出生呢?
平均每天每個區(qū)縣有17個新生兒,有一些人口密集的地方超平均數(shù)10倍或者20倍,也可看出來也離500個差距甚遠,所以可得出結論基本沒有可能兩個人身份證號會相同,如果人口真到非常龐大的時候 ,身份證號也會相應增加位數(shù)或者引入英文字母來規(guī)避號碼相同的問題。 中心化機構這里從上面身份證號關于重復的計算可以看出,先有了戶籍管理部門來制定好一些規(guī)則,然后地方的實施者(派出所)再按照規(guī)則去生成每個人的身份證號,在這里拋出了最關鍵的一個點,中心化的戶籍部門。 在計算機世界里,我們都知道每個能訪問到的服務器都有一個唯一標識IP地址,你能通過IP地址準確找到你的服務器,是怎么實現(xiàn)的呢?其實與身份證號生成流程是一致的,都是要有一個中心化的機構去做分發(fā)地址這件事,這個計算機世界里這個中心化機構就是因特網(wǎng)信息中心。 為什么真有人身份證號相同?其實生活中確實存在著身份證號相同的問題,在互聯(lián)網(wǎng)還不是非常普及的時候,各地的派出所沒有聯(lián)網(wǎng)條件,也沒辦法查該身份證號是否存在,都是靠人來記錄的,所以會導致極少一部分人員出現(xiàn)身份證號重復的問題。 這也說明中心機構的可靠性是保證身份證號唯一性的重要原因。 思考最后思考一下,如果沒有中心化機構了,我們又該怎么做類似身份證號的唯一標識呢?請看下一篇,無中心化機構,計算機世界的唯一標識是如何生成之UUID? |
|