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