Code:D $Letters S 26A INZ('ABCDEFGHIJKLMNOPQRSTUVWXYZ') D $LrgNbr S 63S 0 Maximum des Systems D $Rest S 2S 0 D $PrfZif S 2S 0 D $Pos S 2S 0 D $In S 10I 0 D $Out S 10I 0 D $KTO S 15A D $NumKto S 15S 0 D $BLZA S 8A D $STRG S 34A D $STML S 70A IBAN mit Leerstellen D DS D $String1 1 70 D $St1 1 70 DIM(70) D DS D $String2 1 70 D $St2 1 70 DIM(70) C *ENTRY PLIST C PARM $LR 1 C PARM $IBAN 34 IBAN aus Bildschirm C PARM $STRG 34 IBAN ohne Leerstel. C PARM $COMP 1 Ind. IBAN falsch /Free //--------------------------------------------------------------------- // P R Ü F R O U T I N E I B A N //--------------------------------------------------------------------- If $IBAN <> *Blanks; // Die übergebene IBAN wird links ausgerichtet und ggf. von // Leerstellen befreit (diverse Schreibweisen, z.B. 'DE12 3456 ...') $String1 = %Trim($IBAN); $String2 = *Blanks; $Out = 1; For $In = 1 to 34; If $St1($In) <> *Blank; $St2($Out) = $St1($In); $Out += 1; EndIf; EndFor; $STRG = %Trim($String2); // Erster Schritt: die ersten vier Stellen ans Ende stellen $String1 = %Trim(%Subst($STRG:5:30)) + %Trim(%Subst($STRG:1:4)); // Zweiter Schritt: Buchstaben durch Ziffern ersetzen $Out = 1; For $In = 1 to 34; Select; When $St1($In) >= '0' and $St1($In) <= '9'; // Ziffern werden einfach übertragen $St2($Out) = $St1($In); $Out += 1; When $St1($In) >= 'A' and $St1($In) <= 'Z'; // Position des Buchstaben im Alphabet suchen $Pos = %Scan($St1($In):$Letters:1); // Position + 9 = Wert (A=10, B=11; Z=35) $Pos += 9; // den zweistelligen Wert in zwei Schritten übertragen $St2($Out) = %Subst(%EditC($Pos:'X'):1:1); $Out += 1; $St2($Out) = %Subst(%EditC($Pos:'X'):2:1); $St2($Out) = %Subst(%EditC($Pos:'X'):2:1); $Out += 1; Other; // Leerstellen und alles andere ignorieren EndSl; EndFor; // Dritter Schritt: Ziffernfolge in numerisches Feld stellen $LrgNbr = %Dec(%Trim($String2):63:0); // Vierter Schritt: Rest 1 aus der Division durch 97 = IBAN gültig If (%Rem($LrgNbr:97)) <> 1; $COMP = *On; EndIf; // Fünfter Schritt: IBAN in Papierform aufbereiten $STML = %Subst($STRG:1:4)+' '+%Subst($STRG:5:4)+' '+ %Subst($STRG:9:4)+' '+%Subst($STRG:13:4)+' '+ %Subst($STRG:17:4)+' '+%Subst($STRG:21:4)+' '+ %Subst($STRG:25:4)+' '+%Subst($STRG:29:4); // Letzter Schritt: IBAN je nach Länge ohne Aufbereitung übernehmen If %Len(%Trim($STML)) < 35; $IBAN = $STML; EndIf; EndIf; *InLr = $LR; Return; /End-Free
Bookmarks