CreateIBAN(BLZ$, KTN$, LK$)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

CreateIBAN(BLZ$, KTN$, LK$)

Beitrag 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")
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

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

Beitrag 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")
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

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

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

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

Beitrag 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
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

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

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

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

Beitrag 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!!! ;)
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

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

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten