vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Variablen/Strings · Algorithmen/Mathematik   |   VB-Versionen: VB5, VB619.10.06
Berechnung von IBAN-Nummern

Berechnung der IBAN anhand von Länderkennzeichen, Bankleitzahl, Kontonummer

Autor:   Dietrich HerrmannBewertung:  Views:  35.660 
ohne HomepageSystem:  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
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.