我有一个公式,我相信它可以正确计算SSCC条形码标签的Modulus 10校验位,但是我在努力寻找的语法中有错误。
我的代码:
private numbervar intCount;
private stringvar Prefix;
private stringvar serial;
private stringvar barcode;
private numbervar array N[17];
private numbervar intTotal;
private numbervar CheckDigit;
intCount := 10;
Prefix := "00123456"; //test string
Serial := right({rpt_PalletPacklist;1.PalletID}, 6); //test string
barcode := prefix & Serial; //test string
N [1] := toNumber(mid(barcode, 0, 1))*3;
N [2] := toNumber(mid(barcode, 1, 1))*1;
N [3] := toNumber(mid(barcode, 2, 1))*3;
N [4] := toNumber(mid(barcode, 3, 1))*1;
N [5] := toNumber(mid(barcode, 4, 1))*3;
N [6] := toNumber(mid(barcode, 5, 1))*1;
N [7] := toNumber(mid(barcode, 6, 1))*3;
N [8] := toNumber(mid(barcode, 7, 1))*1;
N [9] := toNumber(mid(barcode, 8, 1))*3;
N [10] := toNumber(mid(barcode, 9, 1))*1;
N [11] := toNumber(mid(barcode, 10, 1))*3;
N [12] := toNumber(mid(barcode, 11, 1))*1;
N [13] := toNumber(mid(barcode, 12, 1))*3;
N [14] := toNumber(mid(barcode, 13, 1))*1;
N [15] := toNumber(mid(barcode, 14, 1))*3;
N [16] := toNumber(mid(barcode, 15, 1))*1;
N [17] := toNumber(mid(barcode, 16, 1))*3;
intTotal := N[1]+N[2]+N[3]+N[4]+N[5]+N[6]+N[7]+N[8]+N[9]+N[10]+N[11]+N[12]+N[13]+N[14]+N[15]+N[16]+N[17]
do intCount = intCount + 10
while intTotal > intCount
CheckDigit = intCount - intTotal
return CheckDigit
答案 0 :(得分:1)
在Crystal语法中,您缺少一些“;”并使用无效的“私人”和“返回”条款。
此外,我了解到您应该在“待办事项”中使用“:=”而不是“ =“。
尝试一下:
numbervar intCount;
stringvar Prefix;
stringvar serial;
stringvar barcode;
numbervar array N[17];
numbervar intTotal;
numbervar CheckDigit;
intCount := 10;
Prefix := "00123456"; //test string
Serial := right({rpt_PalletPacklist;1.PalletID}, 6); //test string
barcode := prefix & Serial; //test string
N [1] := toNumber(mid(barcode, 0, 1))*3;
N [2] := toNumber(mid(barcode, 1, 1))*1;
N [3] := toNumber(mid(barcode, 2, 1))*3;
N [4] := toNumber(mid(barcode, 3, 1))*1;
N [5] := toNumber(mid(barcode, 4, 1))*3;
N [6] := toNumber(mid(barcode, 5, 1))*1;
N [7] := toNumber(mid(barcode, 6, 1))*3;
N [8] := toNumber(mid(barcode, 7, 1))*1;
N [9] := toNumber(mid(barcode, 8, 1))*3;
N [10] := toNumber(mid(barcode, 9, 1))*1;
N [11] := toNumber(mid(barcode, 10, 1))*3;
N [12] := toNumber(mid(barcode, 11, 1))*1;
N [13] := toNumber(mid(barcode, 12, 1))*3;
N [14] := toNumber(mid(barcode, 13, 1))*1;
N [15] := toNumber(mid(barcode, 14, 1))*3;
N [16] := toNumber(mid(barcode, 15, 1))*1;
N [17] := toNumber(mid(barcode, 16, 1))*3;
intTotal := N[1]+N[2]+N[3]+N[4]+N[5]+N[6]+N[7]+N[8]+N[9]+N[10]+N[11]+N[12]+N[13]+N[14]+N[15]+N[16]+N[17];
do intCount := intCount + 10
while intTotal > intCount;
CheckDigit = intCount - intTotal;
CheckDigit //this returns!