>*ean13 >#DEFINE EAN13LHA 48 >#DEFINE EAN13LHB 64 >#DEFINE EAN13RH 80 >#DEFINE EAN131STFLAG 33 >#DEFINE EAN132NDFLAG 96 >#DEFINE EAN13CHECK 112 >#DEFINE EAN13CENTER 124 > >PROCEDURE ean13 >PARAMETERS cArtNr5 &&5- oder 12-stellig >PRIVATE cEAN13Str,nEAN13Sum,nCntr1,loob,cEAN13Bar > >DIMENSION aStFlgSq[9,5] >aStFlgSq=EAN13LHB >*aStFlgSq[0]=0 >aStFlgSq[1,1]=EAN13LHA >aStFlgSq[1,3]=EAN13LHA >aStFlgSq[2,1]=EAN13LHA >aStFlgSq[2,4]=EAN13LHA >aStFlgSq[3,1]=EAN13LHA >aStFlgSq[3,5]=EAN13LHA >aStFlgSq[4,2]=EAN13LHA >aStFlgSq[4,3]=EAN13LHA >aStFlgSq[5,3]=EAN13LHA >aStFlgSq[5,4]=EAN13LHA >aStFlgSq[6,4]=EAN13LHA >aStFlgSq[6,5]=EAN13LHA >aStFlgSq[7,2]=EAN13LHA >aStFlgSq[7,4]=EAN13LHA >aStFlgSq[8,2]=EAN13LHA >aStFlgSq[8,5]=EAN13LHA >aStFlgSq[9,3]=EAN13LHA >aStFlgSq[9,5]=EAN13LHA > >cEAN13Str=IIF(LEN(cArtNr5)=12,"",ean13cc()+ean13subs())+cArtNr5 >loob=.T. &&logigal var: len or digits Out Of Bounds >IF LEN(cEAN13Str)=12 > loob=.F. > FOR nCntr1=1 TO 12 > loob=loob OR NOT SUBSTR(cEAN13Str,nCntr1,1)$"1234567890" &&digits 1 to 0 (0-9) only! > ENDFOR nCntr1=1 TO 12 >ENDIF LEN(cEAN13Str)=12 > >IF loob > cEAN13Bar=CHR(EAN131STFLAG) >ELSE loob > nEAN13Sum=0 > cEAN13Bar="" >*position counted leftwards from the rightmost of the 12 data chars!!! > FOR nCntr1=1 TO 12 &&1=12th position=even!!! 12=1st pos=odd >*calculate checksum - mod=even, but odd position > nEAN13Sum=nEAN13Sum+VAL(SUBSTR(cEAN13Str,nCntr1,1))*IIF(MOD(nCntr1,2)=0,3,1) >*assemble cEAN13Bar > DO CASE > CASE nCntr1=1 > cEAN13Bar=cEAN13Bar+CHR(EAN131STFLAG+VAL(SUBSTR(cEAN13Str,nCntr1,1))) > CASE nCntr1=2 > cEAN13Bar=cEAN13Bar+CHR(EAN132NDFLAG+VAL(SUBSTR(cEAN13Str,nCntr1,1))) > CASE nCntr1>7 > cEAN13Bar=cEAN13Bar+CHR(EAN13RH+VAL(SUBSTR(cEAN13Str,nCntr1,1))) > OTHERWISE &&3-7 > IF cEAN13Str="0" > cEAN13Bar=cEAN13Bar+CHR(EAN13LHA+VAL(SUBSTR(cEAN13Str,nCntr1,1))) > ELSE cEAN13Str="0" > cEAN13Bar=cEAN13Bar+CHR(aStFlgSq[val(left(cEAN13Str,1)),nCntr1-2]; > +VAL(SUBSTR(cEAN13Str,nCntr1,1))) > ENDIF ,cEAN13Str="0" > cEAN13Bar=cEAN13Bar+IIF(nCntr1=7,CHR(EAN13CENTER),"") > ENDCASE > ENDFOR nCntr1=1 TO 12 >*calculate and add check char val > cEAN13Bar=cEAN13Bar+CHR(EAN13CHECK+MOD(10-MOD((nEAN13Sum),10),10)) >ENDIF ,loob >RETURN cEAN13Bar >>