Benutzer-Werkzeuge

Webseiten-Werkzeuge


dc:create_iban

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 );
dc/create_iban.txt · Zuletzt geändert: 2015/12/19 00:00 (Externe Bearbeitung)