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

