Prüfziffer von Kontonummer berechnen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Prüfziffer von Kontonummer berechnen

    Hallo,

    ich sitze nun seit Längerem daran, eine Kontonummer ( in diesem Fall nur Konten der Sparkasse ) auf ihre Richtigkeit zu überprüfen.

    Dazu habe ich mir die Berechnungsmethode rausgesucht ( Quelle: bundesbank.de/download/zahlungsverkehr/zv_pz200909.pdf )

    Die erste Methode ist die Benötigte. Also habe ich folgenden Code geschrieben:

    VB.NET-Quellcode

    1. Public Shared Function Pruefsumme(ByVal Kontonummer As String) As BooleanDim index As Integer = 0
    2. Dim Multi As Integer = 1
    3. Dim tmp As String = ReverseString(Kontonummer) ' Der String wird umgedreht
    4. Dim NrChars() As Char = tmp.ToCharArray ' Alles ins Array schieben
    5. Dim ToAdd As New List(Of Integer) ' Hier werden
    6. For Each c As Char In NrChars ' Jede Ziffer durchgehen und sie nach dem Modus mit 2 o. 1 multiplizieren
    7. Select Case Multi
    8. Case 1 : ToAdd.Add(CInt(c.ToString) * 2) : Multi = 2
    9. Case 2 : ToAdd.Add(CInt(c.ToString) * 1) : Multi = 1
    10. End Select
    11. Next
    12. Dim ergebnis As Integer
    13. For i As Integer = 0 To ToAdd.Count - 1
    14. If ToAdd(i).ToString.Length = 1 Then
    15. ergebnis += ToAdd(i)
    16. Else
    17. ergebnis += Quersumme(ToAdd(i).ToString) 'Bei zweistelliger Zahl wird die Quersumme gebildet
    18. End If
    19. Next
    20. Debug.Print(ergebnis.ToString)
    21. If NrChars(0).ToString = ergebnis.ToString.Substring(0, 1) Then
    22. Return True
    23. End If
    24. Return False
    25. End Function

    Leider bekomme ich nicht so wirklich das richtige Ergebnis, aber vielleicht wisst ihr ja mehr darüber?
    Testkontonummer sind dem PDF zu entnehmen.

    Mit freundlichen Grüßen,
    eXpire
    Ich würde zunächst nicht mit Char, sondern mit Byte oder Integer arbeiten, damit Du die Ziffern auch als solche siehst.
    Dann kannst Du den Algorithmus im Debug-Mode parallel zur Anleitung verfolgen und siehst sofort, wo es klemmt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also ich habe es jetzt nochmal so versucht, Resultat ist aber das Gleiche:

    VB.NET-Quellcode

    1. Public Shared Function Pruefsumme(ByVal Kontonummer As String) As Boolean
    2. Dim MultiplicateOption As Boolean = True ' True = 2, False = 1
    3. Dim tmp As String = ReverseString(Kontonummer)
    4. Dim Numbers As New List(Of Integer)
    5. Dim Number_Original() As Integer
    6. Dim Result As Integer
    7. For i As Integer = 0 To tmp.Length - 1
    8. Numbers.Add(Integer.Parse(tmp.Chars(i)))
    9. Next
    10. ReDim Number_Original(Numbers.Count)
    11. Numbers.CopyTo(Number_Original)
    12. If tmp.Length <= 9 Then 'Nullen anhängen, wenn die Kto nich 10 Stellen beträgt
    13. Do Until Numbers.Count = 10
    14. Numbers.Insert(Numbers.Count, 0)
    15. Loop
    16. End If
    17. 'Debug.Print(tmp.ToString)
    18. 'Debug.Print(Numbers.Count.ToString)
    19. For i As Integer = 0 To Numbers.Count - 1
    20. Select Case MultiplicateOption
    21. Case True : Numbers(i) = Numbers(i) * 2
    22. Case False : Numbers(i) = Numbers(i) * 1
    23. End Select
    24. MultiplicateOption = Not MultiplicateOption
    25. Next
    26. For i As Integer = 0 To Numbers.Count - 1
    27. If Numbers(i).ToString.Length = 1 Then
    28. Result += Numbers(i)
    29. Else
    30. Result += Quersumme(Numbers(i).ToString)
    31. End If
    32. Next
    33. Result = 10 - Integer.Parse((Result.ToString.Substring(1, 1)))
    34. If Number_Original(0) = Result Then
    35. Debug.Print(Result.ToString)
    36. Return True
    37. End If
    38. Debug.Print(Result.ToString)
    39. Return FalseEnd Function
    Und jetzt erwartest u, dass einer hier das Programm Schritt für Schritt durchgeht und mit dem PDF vergleicht?
    Zeig doch mal, dass Du das selbst kannst.
    Schreibe zu jedem Schritt im Programm einen Kommentar mit der Aufgabenstellung aus dem PDF.
    Dann solltest Du Deinen Fehler selbst finden. :thumbup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nein Rod, ich erwarte garnix, aber ich habe gehofft ^^
    Aber ich habe den Fehler nun gefunden und nun werkelt alles so, wie es auch soll.
    Und zwar sollte man die Kontonummer auch auf zehn Stellen erhöhen, dann allerdings auch nur mit den ersten neun
    rechnen, dann von 10 subtrahieren und schon hat man die 10. Stelle der Kontonummer.
    Also eigentlich ganz einfach :P