Seite 1 von 1

CreateIBAN(BLZ$, KTN$, LK$)

Verfasst: 18.05.2014 15:12
von Rudi

Code: Alles auswählen

EnableExplicit

Procedure.s CreateIBAN(BLZ$, KTN$, LK$)
	Protected i, Modulo, LA$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	BLZ$ = UCase(RemoveString(BLZ$, " "))
	KTN$ = UCase(RemoveString(KTN$, " "))
	LK$ = UCase(RemoveString(LK$, " "))
	Protected LKN$ = LK$
	
	For i=1	To Len(LA$)
		BLZ$ = ReplaceString(BLZ$, Mid(LA$, i, 1), Str(i+9), #PB_String_NoCase)
		KTN$ = ReplaceString(KTN$, Mid(LA$, i, 1), Str(i+9), #PB_String_NoCase)
		LKN$ = ReplaceString(LKN$, Mid(LA$, i, 1), Str(i+9), #PB_String_NoCase)
	Next
	
	Protected BBAN$ = BLZ$ + RSet(KTN$, 10, "0")
	Protected Pruefsumme$ = BBAN$ + LSet(LKN$, 6, "0")
	
	For i=1 To Len(Pruefsumme$)
		Modulo = Val(Str(Modulo) + Mid(Pruefsumme$, i, 1)) % 97
	Next
	
	Protected Pruefziffer$ = RSet(Str(98 - Modulo), 2, "0")
	Protected IBAN$ = LK$ + Pruefziffer$ + BBAN$
	
	For i=5 To Len(IBAN$) Step 5
		IBAN$ = InsertString(IBAN$, " ", i)
	Next
	
	ProcedureReturn IBAN$
EndProcedure

Debug CreateIBAN("70090100", "1234567890", "DE")

Re: CreateIBAN(BLZ$, KTN$, LK$)

Verfasst: 19.05.2014 18:24
von Rudi
Gepointet:

Code: Alles auswählen

Procedure.s CreateIBAN(BLZ$, KTN$, LK$)
	BLZ$ = UCase(RemoveString(BLZ$, " "))
	KTN$ = UCase(RemoveString(KTN$, " "))
	LK$ = UCase(RemoveString(LK$, " "))
	Protected BBAN$ = BLZ$ + RSet(KTN$, 10, "0"), Modulo, i
	Protected Pruefsumme$ = BBAN$ + LSet(LK$, 4, "0"), *c.Character = @Pruefsumme$
	
	While *c\c
		If *c\c <= '9'
			Modulo = (Modulo * 10 + *c\c - '0') % 97
		Else
			Modulo = (Modulo * 100 + *c\c - 'A' + 10) % 97
		EndIf
		*c + SizeOf(Character)
	Wend

	Protected Pruefziffer$ = RSet(Str(98 - Modulo), 2, "0")
	Protected IBAN$ = LK$ + Pruefziffer$ + BBAN$
	
	For i=5 To Len(IBAN$) Step 5
		IBAN$ = InsertString(IBAN$, " ", i)
	Next
	
	ProcedureReturn IBAN$
EndProcedure

Debug CreateIBAN("70090100", "1234567890", "DE")

Re: CreateIBAN(BLZ$, KTN$, LK$)

Verfasst: 19.05.2014 18:36
von ts-soft
Sehr schön, aber leider funktioniert das nicht immer:
IBAN - Wikipedia hat geschrieben:Die ECBS warnt, dass die Erstellung einer IBAN ausschließlich durch die Bankinstitute erfolgen darf. Das basiert darauf, dass es für die Bildung der IBAN aus herkömmlicher Bankleitzahl und Kontonummer mehrere Varianten gibt, beispielsweise bei der Bildung der Prüfsumme oder dem Wegfall von Filialnummern.

Re: CreateIBAN(BLZ$, KTN$, LK$)

Verfasst: 19.05.2014 18:51
von Rudi
Hast Du Informationen welche Varianten das noch sein könnten?
Deutschlandweit funktioniert es jedenfalls.

Wer es genauer wissen will: http://de.wikipedia.org/wiki/Internatio ... unt_Number

Re: CreateIBAN(BLZ$, KTN$, LK$)

Verfasst: 19.05.2014 19:14
von ts-soft
Rudi hat geschrieben:Deutschlandweit funktioniert es jedenfalls.
Dann solltest Du die von Dir verlinkte Seite mal komplett durchlesen :mrgreen:
Mit der ersten Veröffentlichung wurden 47 darüberhinausgehende Ausnahmen dokumentiert, eine Beschreibung der Sonderregeln umfasst 150 Seiten und gerade für die großen Banken bis zu 20 Seiten
Eine Online-Validierung, die bei deutschen IBANs die obigen Fehler erkennt, bietet die freie Software konto_check Der IBAN-Test überprüft auch, ob bei einer vorgegebenen IBAN u.U eine Regel nicht beachtet wurde und gibt dann eine entsprechende Warnung aus.
Es gibt also ein paar Ausnahmen, auch in Deutschland!

Gruß
Thomas

Re: CreateIBAN(BLZ$, KTN$, LK$)

Verfasst: 19.05.2014 19:27
von Rudi
Das ist richtig, es gibt in D. IBANs, die falsch berechnet wurden. Das ist aber ein Fehler den die Banken gemacht haben.
Übrigens rate ich natürlich ausdrücklich davon ab, Geld, auf ein vermeintliches Konto einer selbstgenerierten IBAN zu überweisen!!! ;)

Re: CreateIBAN(BLZ$, KTN$, LK$)

Verfasst: 19.05.2014 19:39
von ts-soft
Rudi hat geschrieben:Das ist richtig, es gibt in D. IBANs, die falsch berechnet wurden. Das ist aber ein Fehler den die Banken gemacht haben.
Ist kein Fehler der Banken, das sind die erlaubten Abweichungen, die Banken für Ihre interne
Verarbeitung machen dürfen, so hab ich das wenigstens verstanden, nachdem ich ne menge darüber gelesen habe.

Aber die Trefferrate Deines Codes dürfte weit über 95% liegen, insofern nutzbar, aber mit vorsicht :allright: