文档库 最新最全的文档下载
当前位置:文档库 › 条码校验码计算公式(含代码).

条码校验码计算公式(含代码).


首先说商品条码。商品条码中需要计算校验码的有: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减去余数的差即为校验码。



2.从序号2开始求出偶数位数字之和① 9+7+5+3+1+9=34 ①
3. ①*3=② 34×3=102 ②
4.从序号3开始求出奇数位数字之和③ 8+6+4+2+0+6=26 ③
5. ②+③=④ 102+26=128 ④
6.用大于或等于结果④且为10最小整数倍的数减去④,其差即为所求校验码的值 130-128=2
校验码X=2


//
6939334351042

1,從右到左,從倒數第二位 4 的偶數位相加
4+1+3+3+9+9=29
第一步的結果用A表示

2,將第一步結果乘以3
A*3=B 即:29*3=87 第二步的結果用B表示

3,從右到左,由倒數第三位 0 的奇數位相加
0+5+4+3+3+6=21 第三步的結果用C表示

4,第二步結果加上第三步結果
B+C=D 即: 87+21=108 第四步的結果用D表示

5,用"大於"或"等於" 108(D的結果)且為10的最小整數倍的數減去108(D的結果)
其差即為所求校驗碼的值
110-108=2
(或 10 - mod(108,10))

6,校驗碼乘以1
2*1=2

//gf_checkcode_create
//as_code
//生成 条码校验码
/*
6939334351042
1,從右到左,從倒數第二位 4 的偶數位相加
4+1+3+3+9+9=29
第一步的結果用A表示

2,將第一步結果乘以3
A*3=B 即:29*3=87 第二步的結果用B表示

3,從右到左,由倒數第三位 0 的奇數位相加
0+5+4+3+3+6=21 第三步的結果用C表示

4,第二步結果加上第三步結果
B+C=D 即: 87+21=108 第四步的結果用D表示

5,用"大於"或"等於" 108(D的結果)且為10的最小整數倍的數減去108(D的結果)
其差即為所求校驗碼的值
110-108=2
(或 10 - mod(108,10))

6,校驗碼乘以1
2*1=2
*/
string ls_rc,ls_checkcode
long A,B,C,D,E
long J,K
string ls_tmp

as_code=trim(as_code)
K=1
For J=len(as_code) -1 To 1 step -1
K++
ls_tmp=mid(as_code,J,1)
If mod(K,2)=0 Then
//從右到左,從倒數第二位 4 的偶數位相加
A=A+long(ls_tmp)
ElseIf K>2 and mod(K,2)=1 Then
//從右到左,由倒數第三位 0 的奇數位相加
C=C+long(ls_tmp)
End If

Next
//A*3=B
B=A*3
//B+C=D
D=B+C
//D最小整數倍:D+10 - mod(D,10),D最小整數倍 -D
E=10 - mod(D,10)

ls_checkcode=string(E)

ls_rc=as_code+ls_checkcode

Retur

n ls_rc




相关文档