校驗碼
一組數字的最後一位
校驗碼通常是一組數字的最後一位,由前面的數字通過某種運算得出,用以檢驗該組數字的正確性。常見的校驗碼有中華人民共和國居民身份證的最後一位,ISBN號碼的最後一位等。
凡設有校驗碼的代碼,是由本體碼與校驗碼兩部分組成(如組織機構代碼),本體碼是表示編碼對象的號碼,校驗碼則是附加在本體碼後邊,用來校驗本體碼在輸入過程中準確性的號碼。每一個本體碼只能有一個校驗碼,校驗碼通過規定的數學關係得到。
系統內部預先設置根據校驗方法所導出的校驗公式編製成的校驗程序,當帶有校驗碼的代碼輸入系統時,系統利用校驗程序對輸入的本體碼進行運算得出校驗結果之後,再將校驗結果與輸入代碼的校驗碼進行對比來檢測輸入的正確與否。如果兩者一致,則表明代碼輸入正確,系統允許進入,如果不一致,則表明代碼輸入有誤,系統拒絕進入,並要求代碼重新輸入。
不同的校驗碼的演演算法常常不同。常見的校驗碼演演算法有:碼距、奇偶檢驗、海明校驗、循環冗餘校驗等
按照中華人民共和國國家標準GB11643-1999規定中華人民共和國公民身份號碼校驗碼的計算方法即為ISO7064:1983.MOD11-2校驗碼計演演算法。
假設某一17位數字是
17位數字 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
加權因子 | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
368
計算17位數字各位數字與對應的加權因子的乘積的和S:1×7+2×9+3×10+4×5+5×8+6×4+7×2+8×1+9×6+0×3+1×7+2×9+3×10+4×5+5×8+6×4+7×2=368;計算S÷11的餘數T:368mod11=5;計算(12-T)÷11的餘數R,如果R=10,校驗碼為字母“X”;如果R≠10,校驗碼為數字“R”:(12-5)mod11=7。該17位數字的校驗碼就是7,聚合在一為123456789012345677。
加權因子公式為Wi=2^(n-1)(mod11),n為數字序列從右到左的從1開始的順序數。
序
ai12345678901234567?
Wi79105842163791058421
全國組織機構代碼由八位數字(或大寫拉丁字母)本體代碼和一位數字(或大寫拉丁字母)校驗碼組成。校驗碼按下列公式計算:
8 |
C9=11-MOD(∑Ci×Wi,11) |
i=1 |
MOD-表示求余函數;i-表示代碼字元從左至右位置序號;
Ci-表示第i位置上的代碼字元的值,採用下列“代碼字符集”所列字元;
C9-表示校驗碼;
Wi-表示第i位置上的加權因子,其數值如下表:
加權因子
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
Wi | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
當MOD函數值為1(即C9=10)時,校驗碼應用大寫拉丁字母“X”表示;當MOD函數值為0(即C9=11)時,校驗碼仍用“0”表示;當C9的值為1至9時,校驗碼直接用C9的值表示。
校驗碼系統
冗餘校驗