功能:將15的身份證號(hào)升為18位(根據(jù)GB 11643-1999) 參數(shù):原來(lái)的號(hào)碼(15位) 返回:升位后的18位號(hào)碼 用法:=IDCODE(a1) (假設(shè)A1放的是原15位號(hào)碼) 關(guān)于身份證號(hào)碼最后一位的校驗(yàn)碼的算法如下: 我國(guó)現(xiàn)行使用公民身份證號(hào)碼有兩種尊循兩個(gè)國(guó)家標(biāo)準(zhǔn),〖GB 11643-1989〗和〖GB 11643-1999〗。 〖GB 11643-1989〗中規(guī)定的是15位身份證號(hào)碼:排列順序從左至右依次為:六位數(shù)字地址碼,六位數(shù)字出生日期碼,三位數(shù)字順序碼,其中出生日期碼不包含世紀(jì)數(shù)。 〖GB 11643-1999〗中規(guī)定的是18位身份證號(hào)碼:公民身份號(hào)碼是特征組合碼,由十七位數(shù)字本體碼和一位數(shù)字校驗(yàn)碼組成。排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗(yàn)碼。 地址碼表示編碼對(duì)象常住戶口所在縣(市、旗、區(qū))的行政區(qū)劃代碼。 生日期碼表示編碼對(duì)象出生的年、月、日,其中年份用四位數(shù)字表示,年、月、日之間不用分隔符。 順序碼表示同一地址碼所標(biāo)識(shí)的區(qū)域范圍內(nèi),對(duì)同年、月、日出生的人員編定的順序號(hào)。順序碼的奇數(shù)分給男性,偶數(shù)分給女性。 校驗(yàn)碼是根據(jù)前面十七位數(shù)字碼,按照ISO 7064:1983.MOD 11-2校驗(yàn)碼計(jì)算出來(lái)的檢驗(yàn)碼。 公式如下: ∑(a[i]*W[i]) mod 11 ( i = 2, 3, …, 18 ) (1) ”*” 表示乘號(hào) i——–表示身份證號(hào)碼每一位的序號(hào),從右至左,最左側(cè)為18,最右側(cè)為1。 a[i]—–表示身份證號(hào)碼第 i 位上的號(hào)碼 W[i]—–表示第 i 位上的權(quán)值 W[i] = 2^(i-1) mod 11 計(jì)算公式 (1) 令結(jié)果為 R 根據(jù)下表找出 R 對(duì)應(yīng)的校驗(yàn)碼即為要求身份證號(hào)碼的校驗(yàn)碼C。 R 0 1 2 3 4 5 6 7 8 9 10 C 1 0 X 9 8 7 6 5 4 3 2 由此看出 X 就是 10,羅馬數(shù)字中的 10 就是X,所以在新標(biāo)準(zhǔn)的身份證號(hào)碼中可能含有非數(shù)字的字母X。 Function IDCode(sCode15) Dim i,num Dim code num = 0 IDCode = Left(sCode15, 6) + “19″ + Right(sCode15, 9) ‘ 計(jì)算校驗(yàn)位 For i = 18 To 2 Step -1 num = num + (2 ^ (i - 1) Mod 11) * (Mid(IDCode, 19 - i, 1)) Next num = num Mod 11 Select Case num Case 0 code = “1″ Case 1 code = “0″ Case 2 code = “X” Case Else code = Trim(CStr(12 - num)) End Select IDCode = IDCode + code End Function |
|