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 );