Home

1 1 1 1 1 1 1 1 1 1 Rating 5.00 (1 Vote)
Problemstellung:
Wie kann man in MS-Access ein IBAN (International Bank Account Number) berechnen?

Voraussetzungen:
Das Bsp ist ab A2000 lauffähig. (Download enthält eine mdb-Datei)

Lösung:
Dazu muss man den Aufbau der IBAN kennen. Sie steht aus max. 34 Stellen.
z.B. für Deutschland
DE21200500000123456000
Die ersten beiden Stellen enthalten das Länderkennzeichen.
Einige Länder sind in der Bsp-DB enthalten.
Ausführliche Informationen hier
Die 3. und 4. Stelle enthält die Prüfziffer die es gilt zu berechnen.
Dann kommt die BLZ und die Kontonummer. Diese haben je nach Land unterschiedliche Längen.
In der Bsp-DB sind für einige Länder diese Daten bereits enthalten.
Die Berechnung der Prüfziffer erfolgt nach der Modulus 97-10 Methode nach ISO 7064.
Da am Anfang die Prüffziffer unbekannt ist wird 00 eingesetzt.
Beispiel: DE00672500200001234560
DE Länderkenzzeichen
00 Prüfziffer noch unbekannt
67250020  BLZ in Deutschland immer 8 Stellen
1234560 Kontonummer (10 Stellen erforderlich, bei weniger werden die fehlenden Stellen mit führenden Nullen aufgefüllt)

1. Schritt
Die ersten 4 Stellen werden an das Ende gesetzt

2. Schritt
Die beiden Buchstaben des Länderkürzels müssen in numerische Werte umgewandelt werden.
Die Übersetzung dafür ist A=10, B=11,..., Z=35
Das Zwischenergebnis sähe so aus:

67250020 0001234560 1314 00
Stelle 1-8 BLZ
Stelle 9-18 Kontonummer
Stelle 19-20 D=13
Stelle 21-22 E=14
Stelle 23-24 Prüfziffer derzeit noch 00

3. Schritt
Berechnung nach Modulo 97 Methode

672500200001234560131400 Mod 97


Das geht aber nicht da es zu einem Buffer Overrun kommt. VBA ist nicht in der Lage mit
solchen großen Zahlen richtig umzugehen.
Deshalb greifen wir auf eine Hilfsmethode zurück (Division großer Zahlen (9 Stellen-Methode))
Es wird der Rest der ersten 9 Stellen berechnet, also in unserem Bsp:

672500200 Mod 97


Der Rest wird diese an den Anfang des nächsten Blocks gesetzt und mit den weiteren Zahlen unseres IBAN Strings bis
zur 9. Stelle aufgefüllt usw..
Die letzte Berechnung ergibt dann die IBAN-Prüfziffer.
Die Bsp.-DB funktioniert dann folgendermaßen:
Im Modul "mod_Global" sind 2 Prozeduren und 2 globale Variablen enthalten.

'Arrayvariable für die Zuordnung des LKZ zu numerisch
Public vArray(26, 2) As Variant
'Anfangswert der Prüfziffer ist 0
Public Const cPP As Integer = 0
Public Function Fill_LKZ_Array()
    Dim i As Integer
    For i = 0 To 25
        vArray(i, 0) = i + 10
        vArray(i, 1) = Chr(i + 65)
    Next i
End Function
Public Function SearchArray(sSearch As String) As Integer
    Dim i As Integer
    For i = 0 To 25
        If vArray(i, 1) = sSearch Then
            SearchArray = vArray(i, 0)
            Exit For
        End If
    Next i
End Function

Die Erste füllt beim Aufruf ein Array mit den Zuordnungen der LKZ zu den Zahlen.
Die Zweite wird dann benötigt um nach der Länderauswahl die jeweiligen Zahler aus dem Array zu ermitteln.

Die Berechnung erfolgt dann mit dem Klick auf den Button "IBAN berechnen" in dem Form:

Private Sub cmd_IBAN_Click()
    Dim vLetter1 As Variant, vLetter2 As Variant
    Dim vEmptyPP As Variant, vTempKtoNr As Variant, iKtoLength As Integer, iIBANLength As Integer
    Dim vTempIBAN As Variant, k As Integer, i As Integer, iRest As Integer
    Dim iRestLength As Integer, iAllLength As Integer, vResult As Variant
    
    '******************************************************************************
    'Prüfen ob Felder BLZ und KtoNr gefüllt sind
    If Me.txt_BLZ = "" Or IsNull(Me.txt_BLZ) Then
        MsgBox "Keine BLZ eingegeben!", vbCritical + vbOKOnly, "Fehler"
        Me.txt_BLZ.SetFocus
        Exit Sub
    Else
        If Len(Me.txt_BLZ) <> CInt(Me.cbo_Land.Column(3)) Then
            MsgBox "Die BLZ muss für das gewählte Land muss " & Me.cbo_Land.Column(3) & _
                   " Stellen haben!", vbCritical + vbOKOnly, "Fehler"
            Me.txt_BLZ.SetFocus
            Exit Sub
        End If
    End If
    If Me.txt_KtoNr = "" Or IsNull(Me.txt_KtoNr) Then
        MsgBox "Keine KtoNr eingegeben!", vbCritical + vbOKOnly, "Fehler"
        Me.txt_KtoNr.SetFocus
        Exit Sub
    End If
    '******************************************************************************
    
    'Prüfziffer zum Start auf 00 setzen
    vEmptyPP = Format(cPP, "00")
    
    'Zuordnung der Kennzahlen des LKZ's aus dem Array
    vLetter1 = SearchArray(Left(Me.cbo_Land.Column(1), 1))
    vLetter2 = SearchArray(Right(Me.cbo_Land.Column(1), 1))
    
    'Länge der KtoNr bestimmen und bei Bearf mit Nullen vorn auffüllen
    iKtoLength = Len(Me.txt_KtoNr)
    If iKtoLength < Me.cbo_Land.Column(4) Then
        vTempKtoNr = Format(0, String(Me.cbo_Land.Column(4) - iKtoLength, "0")) & Me.txt_KtoNr
    Else
        vTempKtoNr = Me.txt_KtoNr
    End If
    
    'Aufbau der temporären IBAN und deren länge bestimmen
    vTempIBAN = Me.txt_BLZ & vTempKtoNr & vLetter1 & vLetter2 & vEmptyPP
    iIBANLength = Len(vTempIBAN)
    
    'Anzahl der Durchläufe in 9er Schritten bestimmen da VBA nicht mit solch großen Zahlen rechnen kann
    k = Int(iIBANLength / 9) + 2
    
    'Durchlaufen der temp. IBAN in 9er Schritten und berechnen der jeweiligen Prüfziffer
    For i = 1 To k
        If i = 1 Then
            '1. Durchlauf immer 9 Stellen
            iRest = Left(vTempIBAN, 9) Mod 97
            iRestLength = Len(iRest)
            iAllLength = 9
        ElseIf i = 2 Then
            '2. Durchlauf Anzahl der Stellen der 1. Prüfziffer und weiteren Stellen der
            'temp IBAN auffüllen bis 9 Stellen
            iRest = (iRest & Mid(vTempIBAN, 10, 9 - iRestLength)) Mod 97
            iRestLength = Len(iRest)
            iAllLength = iAllLength + (9 - iRestLength)
        Else
            iRest = (iRest & Mid(vTempIBAN, iAllLength + 1, 9 - iRestLength)) Mod 97
            iRestLength = Len(iRest)
            iAllLength = iAllLength + (9 - iRestLength)
            'Ist die Länge der temp. IBAN ereicht dann raus hier
            If iAllLength >= iIBANLength Then
                vResult = iRest
                Exit For
            Else
                vResult = iRest
            End If
        End If
    Next i
    
    'Rerrechnen der Prüfziffer
    vResult = 98 - vResult
    
    'Komplette IBAN anzeigen
    Me.txt_IBAN = Me.cbo_Land.Column(1) & Format(vResult, "00") & Me.txt_BLZ & vTempKtoNr
End Sub


Das Ergebnis in unserem Fall wäre als Prüfziffern die "09"



Dateien:
(0 Stimmen)

Errechnen einer IBAN mit Access

ab A00

Die Zip-Datei enthält eine Version ab A2000
 
Datum 05.02.2018
Dateigröße 22.9 KB
Download 1.737

Ähnliche Artikel

You have no rights to post comments

Login Form

Neueste Artikel

SQL zu VBA Konverter
26. Oktober 2018
Problemstellung: Nur für 32Bit Office Versionen Gibt es eine Möglichkeit SQL-Code einer Abfrage so zu konvertieren das der Code in VBA genutzt werden kann? Lösung: Bis Access 2010 gibt das Tool...
1.png5.png7.png8.png9.png6.png9.png
Heute1
Gestern486
Diese Woche1318
Dieser Monat7592
Total1578969

  • IP: 18.232.88.17
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

2
Online

29. März 2024

Letzte Kommentare

  • Berechnen von Zeiträumen als Abfragekriterium

    elmard 02.02.2021 21:02
    1000 Dank
    für diese Datenbankanwendung! Eine sehr gute Umsetzung mit den vielen Möglichkeiten des Datums.

    Weiterlesen...

     
  • SQL zu VBA Konverter

    Tommy Admin 03.11.2019 16:33
    RE: SQL zu VBA Konverter
    Hallo Elmard, danke für die Info. :lol:

    Weiterlesen...

     
  • SQL zu VBA Konverter

    elmard 03.11.2019 14:49
    Bei SmartTools neue Version 4.0
    Dieses Tool liegt inzwischen in der Version 4 vor und läuft nun auch von A2013 und A2016 sowie im ...

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    TommyK 27.02.2019 06:52
    Workshop
    Hallo mpegjunkie, danke für Dein Feedback. Schön das Dir Workshop weiter hilft. :D

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    mpegjunkie 26.02.2019 20:10
    Perfekter Workshop
    Hallo Tommy, perfekter Workshop, toll und umfassend erläutert. Jetzt nutze ich diese Controls auch.

    Weiterlesen...