首先说商品条码。商品条码中需要计算校验码的有: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