IBAN - International Bank Account Number - SWIFT

Hinweise zu interessanten Quellen und Projekten

Moderator: Moderatoren

Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: IBAN - International Bank Account Number - SWIFT

Beitrag von dtmackenzie »

Wir machen keine Konvertierung - wir finden es einfacher (und nicht besonders teuer), dies über https://www.iban-service-portal.de machen zu lassen.
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)
Ist ja ähnlich wie Toms Code - war ich auf die gleiche Idee gekommen und habe die 9-Ziffer Abschnittsgröße von ihm übernommen, nur rekursiv implementiert.
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!
Viele Grüße,
David
Antworten