身份證號第18位校驗碼的一種簡便算法
? ? 大家號,我是達生,今天給大家講解一種身份證號第18位校驗碼的計算方法。跟網(wǎng)上的其他計算方法相比,這種方法更簡便,更直觀。
? ? 眾所周知,二代身份證號共有18位數(shù)字,前6位是地址碼,表示公民所在區(qū)(縣、自治縣或縣級市),第7到14位數(shù)字表示公民的出生日期,第15到17位是順序碼,表示在同一地址碼所標識的區(qū)域范圍內(nèi),對同年、同月、同日出生的人編定的順序號,順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。第18位就是今天要講的校驗碼,是根據(jù)前17位數(shù)字通過一定的算法計算出來的數(shù)字(可能為X),用來保證身份證號的正確性,防止用戶不小心輸錯身份證號。計算方法如下:
? ? 首先計算身份證號第一位,將其乘以2再加上身份證號的第二位,將結(jié)果乘以2再加上身份證號的第三位,將結(jié)果乘以2再加上身份證號的第四位,······,一直加到第17位。將所得結(jié)果乘以20再加1,然后計算它除以11的余數(shù),余數(shù)是幾,校驗碼就是幾。余數(shù)是10,校驗碼為X。
? ? 舉個例子,身份證號362425198806257382(隨機產(chǎn)生的身份證號,不要瞎想),它的第一位數(shù)字是3,3乘以2再加上第二位數(shù)字6的結(jié)果是12,12乘以2再加上第三位數(shù)字2的結(jié)果是26,26乘以2再加上第四位數(shù)字4的結(jié)果是56,余下的結(jié)果依次是114,233,467,943,1894,3796,7592,15190,30382,60769,121545,243093,486194。486194*20+1=9723881,9723881除以11的余數(shù)是2,因此身份證號的第18位就是2。
? ? 可以看出,這種方法所產(chǎn)生的中間結(jié)果過大,不便于口算。為了減少計算量,口算時可以每計算一步,將結(jié)果除以11,取其余數(shù)來代替原來的結(jié)果。還是以上面的身份證號為例,(3*2+6)%11=1,(1*2+2)%11=4,(4*2+4)%11=1,······,(4*2+8)%11=5。5*20+1=101,101%11=2,因此身份證號的第18位就是2。這就是本文所介紹的簡便方法。%符號表示取余運算,a%b讀作“a除以b的余數(shù)”。
? ? 計算校驗碼的java代碼如下: