Benutzer-Werkzeuge

Webseiten-Werkzeuge


dc:strisvalidiban

IBAN mit DOCUcontrol® validieren

BOOL StrIsValidIBAN( STRING IBAN )
  BOOL valid;
  INT ASCII, Length, i, Pos, Restwert;
  STRING Begin, Block, Sign;
 
  // VALIDIERUNG DER IBAN MITTELS MODULO 97-10
 
  #DEBUG_START  // nur im DEBUG-Modus
    IBAN = "DE18 1203 0000 0012 3456 78"; // IBAN zum Testen
  #DEBUG_END  // nur im DEBUG-Modus
 
  IF( !StrIsEmpty( IBAN ) ) // nur, wenn Zeichenkette nicht leer ist
    StrRemove( IBAN, ' ' ); // alle Leerzeichen entfernen
 
    IF( StrIsAlnum( IBAN ) ) // nur, wenn die Zeichenkette jetzt aus alphanummerischen Zeichen besteht
      Length = StrGetLength( IBAN ); // die Länge des IBANs
      Begin = StrLeft( IBAN, 4 ); // die ersten 4 Zeichen
      IBAN = StrRight( IBAN, Length - 4 ); // die ersten 4 Zeichen entfernen
      StrInsert( IBAN, 34, Begin ); // die ersten 4 Zeichen hinten anhängen (max. Länge eines IBAN: 34 Zeichen)
 
      FOR( i=1; i<=Length; i++) // jedes Zeichen überprüfen
        Sign = StrMid( IBAN, i, 1);
 
        IF( StrIsAlpha( Sign )) // nur wenn Zeichen ein Buchstabe ist
          ASCII = StrGetAt( Sign ) - 55; // Zeichen D entspricht 13 (ASCII-Zeichen 68 - 55)
          StrReplace( IBAN, i, 1, IntToStr( ASCII ), 2 ); // Zeichen laut KONVERSIONSTABELLE FÜR ALPHAZEICHEN gegen Zahl ersetzen
        ENDIF // nur bei Buchstaben
 
      NEXT // jedes Zeichen überprüfen
 
      FOR( Pos=1; Pos<=Length; Pos=Pos+9 ) // Hilfsmethode für die Berechnung der Prüfziffer (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 (mit eingefügtem Restwert) des IBAN ermitteln
        Trace( "Block: %1 / Mod: %2 / IBAN-Länge: %3", Block, IntToStr( Restwert ), IntToStr( Length ) );
      NEXT // nächser 9er-Block
 
    ENDIF // nur, wenn Zeichenkette aus alphanummerischen Zeichen besteht
 
  ENDIF // nur, wenn Zeichenkette nicht leer ist
 
  IF( Restwert == 1 ) // sofern die Prüfziffer korrekt ist muss der Restwert 1 ergeben
    valid = TRUE;
  ENDIF
 
  Trace( IBAN );
 
RETURN( valid );
dc/strisvalidiban.txt · Zuletzt geändert: 2016/01/08 00:00 (Externe Bearbeitung)