IBAN mit DOCUcontrol ® erstellen
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 );