Crystal reports SSCC条形码-Crystal Reports中的检查数字功能

Crystal reports SSCC条形码-Crystal Reports中的检查数字功能,crystal-reports,Crystal Reports,我有一个公式,我相信它可以正确地计算SSCC条形码标签的模数10校验位,但语法中有一个错误,我正在努力寻找 我的代码: private numbervar intCount; private stringvar Prefix; private stringvar serial; private stringvar barcode; private numbervar array N[17]; private numbervar intTotal; private numbervar Che

我有一个公式,我相信它可以正确地计算SSCC条形码标签的模数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

在Crystal语法中,缺少一些“;”和使用无效的“private”和“return”术语

此外,我理解您应该在“do while”中使用“:=”而不是“=”

试试这个:

 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!