Files
HundM_Fortna/2_ILSLib/FC/FC_Ean8_CheckDigit.scl
T
2026-06-29 16:29:41 +02:00

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