Reputation: 1
I have a formula which I believe correctly calculates a Modulus 10 check digit for an SSCC barcode label but there is an error in the syntax that I am struggling to find.
My code:
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
Upvotes: 0
Views: 472
Reputation: 3188
In Crystal syntax, you are missing some ";" and using the "private" and "return" terms that are not valid.
Furthermore, I understand you should use ":=" instead of "=" in your "do-while".
Try this:
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!
Upvotes: 1