IBAN - Berechnung, Pflicht ab dem 01.02.2014
Verfasst: 15.07.2013 14:59
Im Bereich individueller kaufmännischer Programmierung in einem kleinen Verlag muss nun auf die Änderung im Bankenwesen reagiert werden.
Zum Glück wird bei uns nur der Einzug in einfacher Form durchgeführt.
Hier eine Grundlage zur Berechnung der IBAN aus dem Land sowie der BLZ und der Kontonummer.
Leider sind viele Beispiele der Banken in anderen Sprachen vorgesehen,
die Beschreibungen sind auch verwirrend.
Querverweis, betreff die unterschiedliche Handhabung des Standards in den verschiedenen Ländern: http://www.ecbs.org/iban.htm oder http://pruefziffernberechnung.de
mfG Peter Ross
ps: Wir haben in den letzten Jahren ein großes Programmpaket (Adressverwaltung, Buchungsapplikationen, Versände und deren Optimierungen, Provisionen, etc.) programmatisch von einer HP3000, Sprache Cobol auf die Server-Ebene umgesetzt; die Sprache ist: PureBasic!
Zum Glück wird bei uns nur der Einzug in einfacher Form durchgeführt.
Hier eine Grundlage zur Berechnung der IBAN aus dem Land sowie der BLZ und der Kontonummer.
Leider sind viele Beispiele der Banken in anderen Sprachen vorgesehen,
die Beschreibungen sind auch verwirrend.
Code: Alles auswählen
EnableExplicit
Procedure _IBAN_ermitteln(LAND.s, BLZ.s, Konto.s)
Protected Ergebnis.l
Protected i.l
Protected QA.s
Protected Q.s
Protected Teil.s
PrintN("------------------------------------------------------------------")
Print("Land: " + Chr(34) + LAND + Chr(34))
Konto = RemoveString(Konto,"-")
Konto = RemoveString(Konto,".")
Select LAND
Case "AT"
Print(", Konto (11-stellig): " + Chr(34) + Konto + Chr(34))
PrintN(", BLZ (5-stellig): " + Chr(34) + BLZ + Chr(34))
QA = LAND + "__" + RSet(BLZ, 5, "0") + RSet(Trim(Konto),11,"0")
Case "BE"
Print(", Konto (9-stellig): " + Chr(34) + Konto + Chr(34))
PrintN(", BLZ (3-stellig): " + Chr(34) + BLZ + Chr(34))
QA = LAND + "__" + RSet(BLZ, 3, "0") + RSet(Trim(Konto),9,"0")
Case "CH"
Print(", Konto (12-stellig): " + Chr(34) + Konto + Chr(34))
PrintN(", IID(BC-Nummer, 5-stellig): " + Chr(34) + BLZ + Chr(34))
QA = LAND + "__" + RSet(BLZ, 5, "0") + RSet(Trim(Konto),12,"0")
Case "DE"
Print(", Konto (10-stellig): " + Chr(34) + Konto + Chr(34))
PrintN(", BLZ (8-stellig): " + Chr(34) + BLZ + Chr(34))
QA = LAND + "__" + BLZ + RSet(Trim(Konto),10,"0")
Case "IT"
Print(", Konto (12-stellig): " + Chr(34) + Konto + Chr(34))
PrintN(", BLZ (11-stellig, zusammengesetzt [1+5+5]): " + Chr(34) + BLZ + Chr(34))
QA = LAND + "__" + BLZ + RSet(Trim(Konto),12,"0")
Case "NL"
Print(", Konto (10-stellig): " + Chr(34) + Konto + Chr(34))
PrintN(", BLZ (4-stellig): " + Chr(34) + BLZ + Chr(34))
QA = LAND + "__" + BLZ + RSet(Trim(Konto),10,"0")
Default
EndSelect
Q = QA
Q = Mid(Q,5) + Left(Q,2) + "00"
For i = Asc("A") To Asc("Z")
Q = ReplaceString(Q,Chr(i),Str(Asc(Chr(i)) - 55))
Next
Teil = Left(Q,9)
Ergebnis = Val(Teil) % 97
Q = Mid(Q,10)
Repeat
If Ergebnis > 9
If Len(Q) <= 7
Teil = RSet(Str(Ergebnis),2,"0") + Q
Ergebnis = Val(Teil) % 97
Break
Else
Teil = RSet(Str(Ergebnis),2,"0") + Left(Q,7)
Ergebnis = Val(Teil) % 97
Q = Mid(Q,8)
EndIf
Else
If Len(Q) <= 8
Teil = Str(Ergebnis) + Q
Ergebnis = Val(Teil) % 97
Break
Else
Teil = Str(Ergebnis) + Left(Q,8)
Ergebnis = Val(Teil) % 97
Q = Mid(Q,9)
EndIf
EndIf
ForEver
Ergebnis = 98 - Ergebnis
QA = Left(QA,2) + RSet(Str(Ergebnis),2,"0") + Mid(QA,5)
PrintN("...")
PrintN("Elektronische IBAN: " + QA)
PrintN("Papierausgabe ....: " + Mid(QA,1,4) + Space(1) + Mid(QA,5,4) + Space(1) + Mid(QA,9,4) + Space(1) + Mid(QA,13,4) + Space(1) + Mid(QA,17,4) + Space(1) + Mid(QA,21))
EndProcedure
Procedure Testeingabe()
Protected LAND.s
Protected BLZ.s
Protected Konto.s
Protected E.s
PrintN("Test, ganz primitiv!!!")
PrintN("Alles genau eingeben!!!")
PrintN("Ende = leeres Feld/keine Eingaben ...")
Repeat
Print("Weiter mit J und RETURN, sonst Programmende: ") : e = Input()
e = UCase(e)
If e = "J"
Print("Eingabe des Landes wie DE oder CH (bisher): ") : LAND = Input()
Print("Eingabe der BLZ: ") : BLZ = Input()
Print("Eingabe der Kontonummer: ") : Konto = Input()
LAND = UCase(LAND)
; ; BLZ = UCase(BLZ)
Konto = UCase(Konto)
_IBAN_ermitteln(LAND,BLZ,Konto) ; --- 21
Else
Break
EndIf
ForEver
EndProcedure
OpenConsole()
; ; ; "68" QA = "DE__" + "21050170" + "0012345678" ; --- Beispiel Sparkasse, 3+0 ganz unten ok
; ; ; "10" QA = "CH__" + "002300A1023502601" ; --- Beispiel IBAN*PI
_IBAN_ermitteln("DE","21050170","0012345678") ; --- 68
_IBAN_ermitteln("DE","38621500","18788") ; --- 49
_IBAN_ermitteln("DE","70051995","7229") ; --- 21
_IBAN_ermitteln("AT","19043","234573201") ; --- AT611904300234573201
_IBAN_ermitteln("BE","539","0075470-34") ; --- BE68539007547034
_IBAN_ermitteln("CH","230","A-10.2350.26.01") ; --- 10
_IBAN_ermitteln("IT","X0542811101","123456") ; --- IT60X0542811101000000123456
_IBAN_ermitteln("NL","ABNA","0417164300") ; --- NL91ABNA0417164300
PrintN("...")
Testeingabe()
; ; ; Print("Weiter mit RETURN") : Input()
; --- DE: BLZ(8) + Konto(10)
; --- AT: BLZ(5) + Konto(11)
; --- BE: BLZ(3) + Konto(9)
; --- CH: BLZ(5) + Konto(12)
; --- IT: BLZ(1+5+5) + Konto(12)
; --- NL: BLZ(4) + Konto(10)
; IDE Options = PureBasic 5.11 (Windows - x86)
; CursorPosition = 121
; FirstLine = 86
; Folding = -
; EnableXP
; Executable = ___GPR_MOD97.exe
; CPU = 1
; DisableDebuggermfG Peter Ross
ps: Wir haben in den letzten Jahren ein großes Programmpaket (Adressverwaltung, Buchungsapplikationen, Versände und deren Optimierungen, Provisionen, etc.) programmatisch von einer HP3000, Sprache Cobol auf die Server-Ebene umgesetzt; die Sprache ist: PureBasic!