第二代身份證號碼的編碼規(guī)則
第二代身份證號碼共18位,由17位本體碼和1位校驗(yàn)碼組成。其中,本體碼前6位是地址碼,表示登記戶口時(shí)所在地的行政區(qū)劃代碼,依照《中華人民共和國行政區(qū)劃代碼》國家標(biāo)準(zhǔn)(GB/T2260)的規(guī)定執(zhí)行;接下來的8位是出生年月日,采用YYYYMMDD格式;本體碼的最后三位是順序碼,表示在同一地址碼所標(biāo)識的區(qū)域范圍內(nèi),對同年、同月、同日出生的人編訂的順序號,順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性,即第17位奇數(shù)表示男性,偶數(shù)表示女性;
第二代身份證號碼的第18位是校驗(yàn)碼,采用ISO 7064:1983, MOD 11-2校驗(yàn)字符系統(tǒng)。校驗(yàn)碼取值為模11的余數(shù),如果為10,則用X代替,因此可用一個字符表示。
第一代身份證和第二代身份證的區(qū)別在于:
1. 第一代身份證是15位,而第二代身份證是18位;
2. 第一代身份證出生年月日采用YYMMDD格式,而第二代身份證出生年月日采用YYYYMMDD格式;
3. 第一代身份證沒有校驗(yàn)碼。
校驗(yàn)碼計(jì)算規(guī)則
設(shè)身份證號碼為一字符串 A=[a0, ..., a17], 對應(yīng)地,定義權(quán)重W=[w0, ..., w17] ,wi = 218-i mod 11,則校驗(yàn)公式為:
c = A W mod 11
如果 c = 1, 則校驗(yàn)正確,該身份證號合理。
Python程序
# 輸入身份證字符串A
def IDChecker(A):
... # 判斷A的位數(shù)是否為18
... if len(A) != 18:
... ... return False
if A[17] == 'X' or A[17] == 'x' :
... ... s = 10
else
... ... s = int(A[17] )
... w = 2
... for i in range(len(A)-2,0,-1):
... ... s += int(p[i) * (w%11)
... ... w *= 2
... return s%11 == 1
.
學(xué)者網(wǎng)

評論 0