Die IBAN-Validierung mache ich aber doch wie folgt:
Code: Alles auswählen
FUNC iban_valid(cIBAN)
// IBAN-Prüfsumme validieren.
// Siehe http://de.wikipedia.org/wiki/International_Bank_Account_Number#Validierung_der_Pr.C3.BCfsumme
// http://www.iban.de/iban-pruefsumme.html
// http://www.xbaseforum.de/viewtopic.php?f=6&t=6863
LOCAL cI := RTRIM(cIBAN), cN := "", c := ""
cI := SUBSTR(cI, 5) + SUBSTR(cI, 1, 4)
FOR i := 1 TO LEN(cI)
c := SUBSTR(cI, i, 1)
IF ISDIGIT(c)
cN += c
ELSEIF ISUPPER(c)
cN += STR(10 + Asc(c) - Asc("A"), 2)
ELSE
RETURN .f.
END
NEXT
RETURN (mod_str(cN, 97) == 1)
************
FUNC mod_str(cDividend, nDivisor)
// Modulusberechnung, wobei cDividend nur aus Ziffern bestehen darf aber ohne Längenbeschränkung ist.
IF LEN(cDividend) <= 9
RETURN MOD(VAL(cDividend), nDivisor)
END
RETURN mod_str(ALLTRIM(STR(MOD(VAL(LEFT(cDividend, 9)), nDivisor))) + SUBSTR(cDividend, 10), nDivisor)
IBANs können nämlich länger als 22 Zeichen werden (bis 34 Zeichen für andere SEPA-Länder glaube ich, wobei der numerische String durch Alpha-Konvertierung noch länger werden kann)...
Viele Grüße aus Leipzig - ich denke immernoch ab und zu an die tolle Veranstaltung in Berlin!