身份證号碼是國家為每個公民從出生之日起編定的唯一的、終身不變的的代碼。身份證上的号碼你知道都代表什麼意思嗎?為什麼有些人身份證号碼最後一位是X?今天小編就向大家仔細的介紹一下身份号碼的組成、含義以及編碼的原理。相信你看完本文以後,一定會對身份号碼有一個清晰、透徹的理解。
首先簡要介紹一下身份号碼的組成及含義。
國标GB 11643規定,全國所有公民的身份号碼都是18位的特征碼。所謂特征碼,就是号碼本身反映了公民的一些基本特征,比如籍貫、年齡、性别等。
身份号碼前6位是地址碼,表示公民出生時戶口所在地的地址,此後不随戶籍變化而改變。
緊接着的8位是出生日期碼,表示公民出生的具體日期。
接下來的3位是順序碼,區縣公安機關按順序給轄區内同年同月同日出生的公民進行編碼。順序碼除了起到區分同轄區内同年同月同日出生的公民,還包含了公民的性别特征,公安機關在編制順序碼時,對男性公民編制為單數,女性為偶數。
下面分别詳細介紹各組成部分的編碼原理。
一、地址碼地址碼表示編碼對象(即公民)常住戶口所在縣(市、旗、區)的行政區劃代碼,按國标GB/T 2260的規定執行。
國标GB/T 2260規定了我國縣級及縣級以上行政區劃的數字代碼和字母代碼。其中的數字代碼采用三層六位的層次結構,按層次分别表示我國省(自治區、直轄市、特别行政區)、市(地區、自治州、盟)、縣(自治縣、縣級市、旗、自治旗、市轄區、林區、特區)。
行政區劃數字代碼碼位結構從左到右的含義是:
第一層即前兩位代碼表示省、自治區、直轄市、特别行政區。
按照國務院目前的劃分,我國有34個省(自治區、直轄市、特别行政區),數量超過了10個所以1位數字不夠用,需要采用2位數字來進行編碼。
雖然國标GB/T 2260沒有明确指明,但通過其具體編碼可以看出:為了适應以後省級行政區劃的變更,國标GB/T 2260對這34個省并不是按照順序進行編碼的,而是按照各省所在區域,又劃分為華北、東北、華東、華中華南、西南、西北、台灣、香港澳門等8個大的區域,每個區域包含3~7個省級區劃。用第一位表示區域碼,第二位表示該區域内的省的編碼。
引入區域的概念後,既保持了各省代碼的相對連續,又方便了以後對省級行政區劃變更的擴展。
比如重慶市以前是隸屬于四川省的一個省轄市,升級為直轄市後,新的代碼就從西南區域中分配(新分配到的區劃代碼是50)。假如以後深圳市也有機會升級為直轄市的話,就可以從華南區域分配省級區劃代碼(比如40或47~49)。目前各區域都預留有4~7個代碼作為備用。
具體的區域編碼如下圖所示:(注:區域編碼是小編總結的,國标裡面并沒有明确規定)
各省(自治區、直轄市、特别行政區)的編碼如下圖所示:(下面編碼是國标規定的,不是小編胡亂編造的)
第二層即中間兩位代碼表示市、地區、自治州、盟、直轄市所轄市轄區/縣彙總碼、省(自治區)直轄縣級行政區劃彙總碼,其中:
---01~20/51~70表示市,01、02還用與表示直轄市所轄市轄區/縣彙總碼;
---21~50表示地區、自治州、盟;
---90表示省(自治區)直轄縣級行政區劃彙總碼。
上面這段話可能比較晦澀,參照下圖來看就很好理解了。
第三層即後兩位表示縣、自治縣、縣級市、旗、自治旗、市轄區、林區、特區,其中:
---01~20表示市轄區、地區(自治州、盟)轄縣級市、市轄特區以及省(自治區)直轄縣級行政區劃中的縣級市,01通常表示市轄區彙總碼;
---21~80表示縣、自治縣、旗、自治旗、林區、地區轄特區;
---81~99表示省(自治區)轄縣級市。
這段話也比較晦澀,也請參照下圖來理解。
二、出生日期碼
出生日期碼表示編碼對象(公民)出生的年、月、日,按國标GB/T 7408的規定執行,年、月、日代碼之間不用分隔符。
表示日期的方式有很多種,比如可以采用年月日的方式,也可以采用年周的方式。年月日還可以有不同的編碼:20170825、2017825、8252017、2582017等都可以表示2017年8月25日。身份号碼裡的出生日期碼則隻能采用20170825這一種方式。這也是最符合我們中國人習慣的一種方式。
三、順序碼順序碼表示在同一地址碼所标識的區域範圍内,對同年、同月、同日出生的人編定的順序号,順序碼的奇數分配給男性,偶數分配給女性。
對于順序碼,國标GB 11643隻規定了其位數為三位數字,并要求奇數分配給男性,偶數分配給女性,除此之外,沒有對其做進一步細化。這就給了區縣級公安機關根據本區縣實際情況靈活編制的權利。
從實際身份證号碼來看,區縣級公安局在編制順序碼時,應該是将鄉鎮/街道區劃代碼融入進了順序碼中。
國标GB/T 10114規定,縣級以下行政區劃指鎮、鄉、民族鄉及街道;縣級以下行政區劃代碼由三位數字構成,具體劃分為:001~099表示街道;100~199表示鎮、民族鎮;200~399表示鄉、民族鄉、蘇木(内蒙的基層行政單位)。
從上面規定可以看出,國标GB/T 10114隻是對縣級以下行政區劃代碼作了一個框架性的規定,具體的編碼交由各省、自治區、直轄市标準化管理機構負責編制并作為地方标準。因此,各省的縣級以下行政區劃代碼的編碼規則不一定完全相同。
細心的讀者可能會有擔心,3位順序碼最多容納1000人,如果某一區縣在某一天同時有500個以上的男性或女性出生,那麼第501個及其後面的人顯然就分配不到合法的身份号碼。
其實這個問題無需我們擔心,相關部門在制定這個标準時,已經根據我國的人口現狀,各區縣在以往曆年的出生人口統計中确知,所有區縣的一天出生人口遠遠達不到500個之多。
四、校驗碼校驗碼采用ISO 7064:1983,MOD 11-2校驗算法對前面的地址碼、出生日期碼和順序碼進行校驗。具體校驗公式如下圖所示:
公式中:i表示号碼字符從右至左包括校驗碼字符在内的位置序号,ai表示第i位置上的号碼字符值;wi表示第i位置上的加權因子,其數值依據公式wi=(2^(i-1))(mod 11)計算得出。根據這個公式,小編推導出了另一個公式:w1=1,wi=(2*w(i-1))(mod 11)。(其中w(i-1)是一個整體,表示上一個w,頭條不支持下标輸入,大家将就着看)。這兩個公式是等價的,但是推導公式與更便于計算。下圖是小編為大家計算出的wi在各位置上的值。
上面的校驗公式(1)表示了什麼意思呢,估計很多讀者看到它直犯暈。這裡解釋一下,其實意思不複雜,就是:加入校驗碼後,身份号碼所有位置(包括校驗碼)上的數字乘以該位置上的加權因子再求和,再對11求模,其結果要等于1。
那我們要怎麼計算校驗位呢?
隻需将上面公式稍作變換,具體是将a1×w1從求和表達式中提取出來,因為w1=(2^(1-1))(mod 11)=1,于是我們就得到了下面的公式:
公式中a1就是我們要求的校驗碼字符值,其取值範圍是0~10。當a1=10時,用羅馬字符X表示。
根據上面公式(2),隻要求出第2~18位的∑ai×wi ,就能換算出校驗碼的值。具體換算表如下圖所示:
肯定還有不少讀者要問,上面這個換算表是怎麼來的?以最右邊的10為例解釋一下,與10相加後對11取模等于1的數有:2、13、24、35、46等等無數多個,但是在0~10範圍内的就隻有2;所以10換算後為2,其他的類推。其實說白了就是,二者相加後,等于11的倍數加1。
下面舉例介紹校驗碼的詳細計算方法,假設某男性公民身份号碼的本體碼為11010820171221591,其校驗碼字符值的計算方法及步驟為:
第一步,列出該身份号碼的本體碼,結果如下:(待計算的校驗碼也一并列出來)
第二步,依據公式wi=(2^(i-1))(mod 11)計算加權因子,結果如下:
第三步,計算各位置上的乘積,結果如下:
第四步,乘積求和:∑ai×wi=7 9 0 5 0 32 4 0 6 21 7 18 20 5 40 36 2=212。
第五步,對11取模:∑ai×wi(mod 11)=212=3。
第六步,求出校驗碼字符值,根據(3 a1)≡1(mod 11),算出a1=9。
因此,該男性公民身份号碼的本體碼為110108201712215919。
到這裡完整的身份證編碼原理就全部介紹完了。你看懂了嗎?如果還有問題,歡迎在評論區提問。當然,沒有問題的也歡迎發表你的看法。
,