身份證最后一位的算法采用的是 ISO 7064 《數(shù)據(jù)處理——校驗(yàn)符系統(tǒng)》中給出的 MOD 11-2 校驗(yàn)碼系統(tǒng)。這里的MOD 11-2表示模數(shù)是11,基數(shù)是2。也就是校驗(yàn)公式(見下)中,需要將總數(shù)除以11(模數(shù))并取余數(shù),而每個位置上的加權(quán)因子是通過以2(基數(shù))為底的幾何級數(shù)算出來的。
公民身份號碼校驗(yàn)公式丨國家標(biāo)準(zhǔn)《公民身份號碼》GB11643—1999
身份號碼中的校驗(yàn)碼位于最右邊,所以它位置序號i=1,對應(yīng)的加權(quán)因子W1也等于1。按照公式,我們需要將身份證號碼中其他各個位置上的數(shù)字都乘以對應(yīng)的因子,把它們加起來得到總數(shù),再將總數(shù)除以11并取余數(shù)。如果這個余數(shù)加上校驗(yàn)碼(乘1還是本身)以后,除以11的余數(shù)是1,那就說明這個號碼能夠滿足公式的校驗(yàn)。
為了方便計(jì)算,國家標(biāo)準(zhǔn)中直接給出了校驗(yàn)碼a1和余數(shù)的換算關(guān)系對應(yīng)表:
來源:國家標(biāo)準(zhǔn)《公民身份號碼》GB11643—1999
校驗(yàn)碼計(jì)算范例丨國家標(biāo)準(zhǔn)《公民身份號碼》GB11643—1999
因?yàn)槟?shù)是11,所以最后的結(jié)果有0~10共10種可能性,為了保證校驗(yàn)碼只占1個字符位置,當(dāng)算出來的 a1 等于10時,在身份證上用羅馬數(shù)字符X表示。