STRING GetIBAN( STRING Kontonummer, STRING Bankleitzahl, STRING Laendercode = "DE", BOOL formatiert = TRUE ) INT Length, ASCII, Restwert, Pos; STRING Sign, Block, IBAN, Pruefziffer; #DEBUG_START Kontonummer = "12345678"; Bankleitzahl = "12030000"; // Ergebnis: DE18 1203 0000 0012 3456 78 #DEBUG_END // DATENAUFBEREITUNG StrRemove( Kontonummer, ' ' ); // alle evtl. Leerzeichen aus der Kontonummer entfernen StrRemove( Bankleitzahl, ' ' ); // alle evtl. Leerzeichen aus der Bankverbindung entfernen StrMakeUpper( Laendercode ); // Ländercode muss in Großbuchstaben sein StrFormatRight( Kontonummer, 10, '0' ); // kürzere Kontonummern links mit Nullen ausfüllen // DIE PRÜFZIFFERBERECHNUNG MITTELS MODULO 97-10 IBAN = Bankleitzahl + Kontonummer + Laendercode + "00"; Length = StrGetLength( IBAN ); // Länge des IBAN ermitteln FOR( Pos=1; Pos<=Length; Pos++) // jedes Zeichen überprüfen Sign = StrMid( IBAN, Pos, 1); IF( StrIsAlpha( Sign )) // nur wenn Zeichen ein Buchstabe ist ASCII = StrGetAt( Sign ) - 55; // Zeichen D entspricht 10 (ASCII-Zeichen 65 - 55) // Zeichen laut KONVERSIONSTABELLE FÜR ALPHAZEICHEN gegen Zahl ersetzen: StrReplace( IBAN, Pos, 1, IntToStr( ASCII ), 2 ); ENDIF // nur bei Buchstaben NEXT // jedes Zeichen überprüfen Length = StrGetLength( IBAN ); // neue Länge des IBAN ermitteln FOR( Pos=1; Pos<=Length; Pos=Pos+9 ) // 9er-Blöcke IF( Pos > 9 ) // erst ab dem 1. Durchgang StrInsert( IBAN, Pos, IntToStr( Restwert ) ); // Restwert in IBAN einfügen ENDIF Block = StrMid( IBAN, Pos, 9 ); // nächster Block Restwert = StrToInt( Block ) % 97; // Modulo 97 ermitteln Length = StrGetLength( IBAN ); // neue Länge des IBAN ermitteln Trace( "Block: %1 / Mod: %2 / IBAN-Länge: %3", Block, IntToStr( Restwert ), IntToStr( Length ) ); NEXT // nächser 9er-Block Pruefziffer = IntToStr( 98 - Restwert ); // Der Restwert wird von 98 subtrahiert IF( StrGetLength( Pruefziffer ) == 1 ) // wenn die Prüfziffer nur einstellig ist (1-9) Pruefziffer = "0" + Pruefziffer; // um führende Null ergänzen ENDIF IBAN = Laendercode + Pruefziffer + Bankleitzahl + Kontonummer; // neue IBAN zusammensetzen Length = StrGetLength( IBAN ); // neue Länge des IBAN ermitteln IF( formatiert ) // 4er-Blocke durch Leerzeichen trennen FOR( Pos=5; Pos<=Length; Pos=Pos+5 ) // alle 5 Zeichen StrInsert( IBAN, Pos, " " ); // Leerzeichen einfügen Length++; // Länge um Leerzeichen verlängern NEXT ENDIF RETURN( IBAN );