mgardner
mgardner

Reputation: 1

SSCC barcode - check digit function in Crystal Reports

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

Answers (1)

heringer
heringer

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

Related Questions