校驗碼是由編碼方案決定的,所以在代碼中是否使用校驗碼和條碼基本無關,但商品條碼除外。今天給大家介紹幾種校驗碼的計算方法。
一、商品條碼:
商品條碼中需要計算校驗碼的有:EAN-8(8位),EAN-13(13位),UCC(UPC-A)(12位),GTIN-14(ITF-14)(14位),GLN(13位),SSCC(18位)等。它們雖然位數不同,但計算校驗碼的方法完全相同。
1、包含校驗碼的所有數字從右向左編號,分別為1,2,3......18位;
2、從第2位開始,所有偶數位的權數為3,從第3位開始,所有奇數位的權數為1;
3、將對應位置的代碼數字與權數相乘,參見下圖(以SSCC的18位數字為例);
4、將所有乘積相加求和;(結果為109)
5、對第4步的和,求MOD 10運算(將和109除以10,取其余數9);
6、如果余數為0,則校驗碼為0,否則,用10減去余數的差即為校驗碼。(上例中校驗碼為1)
二、身份證校驗碼:
身份證校驗碼的計算比較復雜一些,參見下圖:
1、自右向左為身份證號編號1-18;
2、確定各位數的權數,權數的計算公式為 2^(i-1) mod 11i—位數
如第3位的權數為2^(3-1)=2^2=4, 4除以11,商0余4,則權數為4。再如第5位的權數為2^(5-1)=2^4=16,16除以11,商1余5,則權數為5。
3、將權數與對應的身份證號數字相乘;
4、將所有乘積相加求和;(示例中的184)
5、將第4步的結果除以11,求余數(示例中的8)
6、從下表的R值中找到第5步的結果,對應的C值即為校驗碼。(示例中8對應的是4)
三、CODE-128碼的校驗符:
CODE-128碼的校驗符不會出現在數據中,也不用讀出,這里僅介紹一下計算方法,實際使用中都是由條碼軟件自動生成的。由於CODE-128碼可以表示字母、符號、控制符,而這些字符不能直接參與計算,所以要為每個字符分配一個碼值。各個字符的碼值可以參閱CODE-128碼的標准文件。
1、首先為字符串編制條碼;
2、從起始符開始,自左向右為每個條碼字符編號;
3、為每一個字符分配權數,起始符和第一個字符的權數為1,以后依次增加;
4、每個字符的權數與碼值相乘;
5、所有乘積求和;
6、第5步的結果除以103求余數;
7、碼值等於余數的字符即為校驗符。見下圖:
EAN-128碼的校驗符的計算與此相同。
從以上三個例子可以看出,幾乎所有的校驗碼的計算都是由以下步驟計算出來的:
1、為代碼中的每一位數字規定序號;
2、給每一位代碼分配一個權數;
3、權數與對應的代碼相乘;
4、將所有的乘積相加;
5、對和進行MOD(求余數)運算;
6、對結果進行再處理得到校驗碼。