校(xiào)验(yàn)碼是(shì)由(yóu)編碼方(fāng)案(àn)决定(dìng)的(de),所以(yǐ)在(zài)代(dài)碼中是(shì)否使用(yòng)校(xiào)验(yàn)碼和(hé)条(tiáo)碼基本(běn)無關(guān),但商品条(tiáo)碼除外(wài)。今天(tiān)給(gěi)大(dà)家(jiā)介紹幾(jǐ)種(zhǒng)校(xiào)验(yàn)碼的(de)計(jì)算方(fāng)法(fǎ)。

一、商品条(tiáo)碼:
商品条(tiáo)碼中需要(yào)計(jì)算校(xiào)验(yàn)碼的(de)有(yǒu):EAN-8(8位(wèi)),EAN-13(13位(wèi)),UCC(UPC-A)(12位(wèi)),GTIN-14(ITF-14)(14位(wèi)),GLN(13位(wèi)),SSCC(18位(wèi))等。它(tā)们(men)雖(suī)然位(wèi)數不(bù)同(tóng),但計(jì)算校(xiào)验(yàn)碼的(de)方(fāng)法(fǎ)完全(quán)相同(tóng)。
1、包(bāo)含校(xiào)验(yàn)碼的(de)所有(yǒu)數字(zì)從右(yòu)向(xiàng)左(zuǒ)編号(hào),分(fēn)别为(wèi)1,2,3......18位(wèi);
2、從第(dì)2位(wèi)開(kāi)始,所有(yǒu)偶數位(wèi)的(de)權數为(wèi)3,從第(dì)3位(wèi)開(kāi)始,所有(yǒu)奇數位(wèi)的(de)權數为(wèi)1;
3、将对(duì)應(yìng)位(wèi)置的(de)代(dài)碼數字(zì)與(yǔ)權數相乘,參見(jiàn)下(xià)图(tú)(以(yǐ)SSCC的(de)18位(wèi)數字(zì)为(wèi)例);
4、将所有(yǒu)乘積相加求和(hé);(結果(guǒ)为(wèi)109)
5、对(duì)第(dì)4步的(de)和(hé),求MOD 10运算(将和(hé)109除以(yǐ)10,取(qǔ)其(qí)餘數9);
6、如(rú)果(guǒ)餘數为(wèi)0,則校(xiào)验(yàn)碼为(wèi)0,否則,用(yòng)10減去(qù)餘數的(de)差即为(wèi)校(xiào)验(yàn)碼。(上(shàng)例中校(xiào)验(yàn)碼为(wèi)1)
二(èr)、身(shēn)份證校(xiào)验(yàn)碼:
身(shēn)份證校(xiào)验(yàn)碼的(de)計(jì)算比較複雜一些(xiē),參見(jiàn)下(xià)图(tú):
1、自(zì)右(yòu)向(xiàng)左(zuǒ)为(wèi)身(shēn)份證号(hào)編号(hào)1-18;
2、确定(dìng)各(gè)位(wèi)數的(de)權數,權數的(de)計(jì)算公(gōng)式为(wèi) 2^(i-1) mod 11 i—位(wèi)數
如(rú)第(dì)3位(wèi)的(de)權數为(wèi)2^(3-1)=2^2=4, 4除以(yǐ)11,商0餘4,則權數为(wèi)4。再如(rú)第(dì)5位(wèi)的(de)權數为(wèi)2^(5-1)=2^4=16,16除以(yǐ)11,商1餘5,則權數为(wèi)5。
3、将權數與(yǔ)对(duì)應(yìng)的(de)身(shēn)份證号(hào)數字(zì)相乘;
4、将所有(yǒu)乘積相加求和(hé);(示例中的(de)184)
5、将第(dì)4步的(de)結果(guǒ)除以(yǐ)11,求餘數(示例中的(de)8)
6、從下(xià)表(biǎo)的(de)R值中找(zhǎo)到(dào)第(dì)5步的(de)結果(guǒ),对(duì)應(yìng)的(de)C值即为(wèi)校(xiào)验(yàn)碼。(示例中8对(duì)應(yìng)的(de)是(shì)4)
三(sān)、CODE-128碼的(de)校(xiào)验(yàn)符:
CODE-128碼的(de)校(xiào)验(yàn)符不(bù)会(huì)出(chū)現(xiàn)在(zài)數據(jù)中,也不(bù)用(yòng)读(dú)出(chū),这(zhè)里(lǐ)僅介紹一下(xià)計(jì)算方(fāng)法(fǎ),實(shí)際使用(yòng)中都是(shì)由(yóu)条(tiáo)碼软(ruǎn)件(jiàn)自(zì)動(dòng)生成的(de)。由(yóu)于(yú)CODE-128碼可(kě)以(yǐ)表(biǎo)示字(zì)母、符号(hào)、控制符,而(ér)这(zhè)些(xiē)字(zì)符不(bù)能(néng)直(zhí)接參與(yǔ)計(jì)算,所以(yǐ)要(yào)为(wèi)每个(gè)字(zì)符分(fēn)配一个(gè)碼值。各(gè)个(gè)字(zì)符的(de)碼值可(kě)以(yǐ)參閱CODE-128碼的(de)标(biāo)準文(wén)件(jiàn)。
1、首先(xiān)为(wèi)字(zì)符串編制条(tiáo)碼;
2、從起(qǐ)始符開(kāi)始,自(zì)左(zuǒ)向(xiàng)右(yòu)为(wèi)每个(gè)条(tiáo)碼字(zì)符編号(hào);
3、为(wèi)每一个(gè)字(zì)符分(fēn)配權數,起(qǐ)始符和(hé)第(dì)一个(gè)字(zì)符的(de)權數为(wèi)1,以(yǐ)後(hòu)依次(cì)增加;
4、每个(gè)字(zì)符的(de)權數與(yǔ)碼值相乘;
5、所有(yǒu)乘積求和(hé);
6、第(dì)5步的(de)結果(guǒ)除以(yǐ)103求餘數;
7、碼值等于(yú)餘數的(de)字(zì)符即为(wèi)校(xiào)验(yàn)符。見(jiàn)下(xià)图(tú):
EAN-128碼的(de)校(xiào)验(yàn)符的(de)計(jì)算與(yǔ)此(cǐ)相同(tóng)。
從以(yǐ)上(shàng)三(sān)个(gè)例子可(kě)以(yǐ)看(kàn)出(chū),幾(jǐ)乎所有(yǒu)的(de)校(xiào)验(yàn)碼的(de)計(jì)算都是(shì)由(yóu)以(yǐ)下(xià)步驟計(jì)算出(chū)来(lái)的(de):
1、为(wèi)代(dài)碼中的(de)每一位(wèi)數字(zì)規定(dìng)序号(hào);
2、給(gěi)每一位(wèi)代(dài)碼分(fēn)配一个(gè)權數;
3、權數與(yǔ)对(duì)應(yìng)的(de)代(dài)碼相乘;
4、将所有(yǒu)的(de)乘積相加;
5、对(duì)和(hé)進(jìn)行MOD(求餘數)运算;
6、对(duì)結果(guǒ)進(jìn)行再處(chù)理得到(dào)校(xiào)验(yàn)碼。

