41 lines
1.3 KiB
Plaintext
41 lines
1.3 KiB
Plaintext
FUNCTION "FC_Ean8_CheckDigit" : Void
|
|
{ S7_Optimized_Access := 'TRUE' }
|
|
VERSION : 0.1
|
|
VAR_INPUT
|
|
sInDigits : String; // Barcode String (muss 7-stellig sein)
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
sOutBarcode : String; // 8-stelliges Resultat als String
|
|
nOutBarcode : DInt; // 8-stelliges Resultat als DINT
|
|
END_VAR
|
|
|
|
VAR_TEMP
|
|
sBarcode : String; // Resultat als String
|
|
nLengthString : Int; // Ermittelte Länge des Eingangsstrings
|
|
nSum : Int; // Zwischensumme der berechneten Prüfziffer
|
|
nCheckDigit : Int; // berechnete Prüfziffer
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
(*
|
|
Prüft ob String siebenstellig ist.
|
|
Falls nein, dann RETURN.
|
|
Falls ja, dann errechne die Prüfziffer nach EAN8 und gebe Barcode als DINT sowie String aus.
|
|
*)
|
|
#nLengthString := LEN(#sInDigits);
|
|
IF #nLengthString <> 7 THEN
|
|
RETURN;
|
|
END_IF;
|
|
#nSum := STRING_TO_INT(#sInDigits[7]) * 3 + STRING_TO_INT(#sInDigits[6]) + STRING_TO_INT(#sInDigits[5]) * 3 + STRING_TO_INT(#sInDigits[4]) + STRING_TO_INT(#sInDigits[3]) * 3 + STRING_TO_INT(#sInDigits[2]) + STRING_TO_INT(#sInDigits[1]) * 3 ;
|
|
#nCheckDigit := 10 - (#nSum MOD 10);
|
|
IF #nCheckDigit = 10 THEN
|
|
#nCheckDigit := 0;
|
|
END_IF;
|
|
#sOutBarcode := #sBarcode := CONCAT(IN1 := #sInDigits, IN2 := DELETE(IN:=INT_TO_STRING(#nCheckDigit), L:=1, P:=1));
|
|
#nOutBarcode := STRING_TO_DINT(#sBarcode);
|
|
|
|
END_FUNCTION
|
|
|