Rubrik: Variablen/Strings · Algorithmen/Mathematik | VB-Versionen: VB5, VB6 | 19.10.06 |
Berechnung von IBAN-Nummern Berechnung der IBAN anhand von Länderkennzeichen, Bankleitzahl, Kontonummer | ||
Autor: Dietrich Herrmann | Bewertung: | Views: 35.660 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Mit nachfolgender Funktion lässt sich die IBAN-Nummer nach der Standard IBAN-Berechnung für deutsche Bankverbindungen ermitteln.
Beachten Sie bitte, dass es zusätzlich sehr viele Ausnahmen gibt (Stichwort IBAN-Regeln).
Tipp:
Um auch die IBAN-Regeln zu berücksichtigen und gleichzeitig auch die BIC zu einer Blz zu ermitteln, gibt es eine fertige Entwicklerkomponente:
sevDTA 2.0 (32-Bit DLL für VB6/VBA oder .NET Komponente)
Beschreibung der Parameter:
- sLand: Länderkennzeichen DE für Deutschland
- sBLZ: Bankleitzahl
- sKtoNr: Kontonummer
- nBLZMaxLen: max. Länge der BLZ (8 für Deutschland)
- nKTOMaxLen: max. Länge der Kontonummer (10 für Deutschland)
' IBAN-Nummer ermitteln Private Function IBANCalc(ByVal sLand As String, _ ByVal sBLZ As String, _ ByVal sKtoNr As String, _ Optional ByVal nBLZMaxLen As Integer = 8, _ Optional ByVal nKTOMaxLen As Integer = 10) As String Dim zahl As Variant Dim pz As Variant Dim sIBAN As String Dim sChar As String Dim sTemp As String Dim i As Integer sIBAN = sLand & "00" & _ Format$(sBLZ, String$(nBLZMaxLen, "0")) & _ Format$(sKtoNr, String$(nKTOMaxLen, "0")) sIBAN = Right$(sIBAN, Len(sIBAN) - 4) & Left$(sIBAN, 4) For i = 1 To Len(sIBAN) sChar = Mid$(sIBAN, i, 1) If Asc(sChar) > 64 And Asc(sChar) < 91 Then sChar = CStr(Asc(sChar) - 55) End If sTemp = sTemp & sChar Next i zahl = CDec(sTemp) pz = 98 - modDecimal(zahl, 97) sTemp = Left$(sTemp, Len(sTemp) - 2) & Trim$(Format(STR$(pz), "00")) sTemp = Right$(sTemp, 6) & Left$(sTemp, Len(sTemp) - 6) IBANCalc = Chr$(Val(Left$(sTemp, 2)) + 55) & _ Chr$(Val(Mid$(sTemp, 3, 2)) + 55) & _ Right$(sTemp, Len(sTemp) - 4) End Function
Da es sich bei den Berechnungen um sehr große ganze Zahlen handelt, muss auf das Decimal-Format ausgewichen werden (mit CDec) und es braucht eine eigene Modulo-Funktion:
' Hilfsfunktion: Modulo für große Zahlen Public Function modDecimal(Dividend, Divisor) If Divisor = 0 Then modDecimal = -1 Else modDecimal = Dividend - Divisor * (Round(Dividend / Divisor)) If modDecimal < 0 Then modDecimal = Divisor + modDecimal End If End Function
Aufrufbeispiel:
' Deutschland ' BLZ: 793 530 90 ' Konto-Nr.: 16303 ' ' offizielle IBAN-Nummer lautet: DE65793530900000016303 Dim sIBAN As String sIBAN = IBANCalc("DE", "79353090", "16303", 8, 10)
Wichtiger Hinweis:
Nur die jeweilige Bank kann offizielle IBANs berechnen, deswegen wird von mir keinerlei Gewähr für die Anwendung der Funktion übernommen.
Quelle IBAN: http://www.pruefziffernberechnung.de/I/IBAN.shtml