EAN Code prüfen/Prüfziffer berechnen

    • VB.NET

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

      EAN Code prüfen/Prüfziffer berechnen

      Hallo,
      Ich habe einen Code geschrieben mit dem Ihr die Prüfziffer einer EAN nummer berechnen könnt und damit überprüfen könnt ob der EAN gültig ist oder nicht.

      Wie wird die Prüfziffer berechnet?
      -> Die einzelnen Ziffern werden abwechselnd mit 1 und 3 Multipliziert(bis auf die Letzte Ziffer da dies die Prüfsumme ist).
      -> auf das ergebnis der einzelnen Ziffern wird dann Modulo 10 angewandt um die einerstelle rauszufiltern.
      -> Diese einerstellen werden dann miteinander Addiert
      -> Auf das Ergebnis wird dann wieder Modulo 10 angewandt und das Ergebnis ist dann die Prüfziffer.

      Beispiel:

      Quellcode

      1. 9 7 8 3 1 6 1 4 8 4 1 [0]───────┐
      2. * * * * * * * * * * * │
      3. 1 3 1 3 1 3 1 3 1 3 1 │
      4. = = = = = = = = = = = │
      5. 9 21 8 9 1 18 1 12 8 12 1 │
      6. ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼────── MOD 10 │
      7. 9 + 1 + 8 + 9 + 1 + 8 + 1 + 2 + 8 + 2 + 1 │
      8. │ │ │ │ │ │ │ │ │ │ │ │
      9. └───────┴───────┴───────┴───────┴───────┼───────┴───────┴───────┴───────┴───────┘ │
      10. (10-50) │
      11. ├────────────────────────────────────────────── MOD 10 │
      12. 0 │
      13. └─────────────────────────────────────────────────────────┘


      Und nun der VB.NET Source:

      VB.NET-Quellcode

      1. ''' <summary>
      2. ''' Überprüft die Prüfziffer des angegebenen EAN Codes.
      3. ''' </summary>
      4. ''' <param name="EAN">Der EAN-Code der überprüft werden soll.</param>
      5. ''' <returns>Wenn die Prüfziffer stimmt, True ansonsten False.</returns>
      6. ''' <remarks></remarks>
      7. Function CheckChecknumber(ByVal EAN As String) As Boolean
      8. Dim chars() As Char = EAN.Substring(0, EAN.Length - 1).ToCharArray
      9. Dim Multiplikator = 1
      10. Dim CheckNumber = 0
      11. Dim numb = 0
      12. For Each c In chars
      13. If Integer.TryParse(c, numb) Then
      14. CheckNumber += (numb Mod 10) * Multiplikator
      15. Multiplikator = If(Multiplikator = 1, 3, 1)
      16. End If
      17. Next
      18. Return If(((10 - CheckNumber Mod 10) Mod 10) = Integer.Parse(EAN.Last), True, False)
      19. End Function
      20. ''' <summary>
      21. ''' Generiert die Prüfziffer des Angegebenen EAN Codes.
      22. ''' </summary>
      23. ''' <param name="EAN">Der EAN Code aus dem die Prüfziffer Generiert werden soll.</param>
      24. ''' <returns>Gibt die Prüfziffer des angegebenen EAN Codes zurück</returns>
      25. ''' <remarks></remarks>
      26. Function GetChecknumber(ByVal EAN As String) As Integer
      27. Dim Numbers() As Char = EAN.ToCharArray
      28. Dim Multiplikator As Integer = 1
      29. Dim CheckNumber As Integer = 0
      30. Dim numb = 0
      31. For Each c As Char In Numbers
      32. If Integer.TryParse(c, numb) Then
      33. CheckNumber += (numb Mod 10) * Multiplikator
      34. Multiplikator = If(Multiplikator = 1, 3, 1)
      35. End If
      36. Next
      37. Return (10 - CheckNumber) Mod 10
      38. End Function


      Ich hoffe Ihr könnt damit was anfangen :)
      Kritik und vorschläge wie immer erwünscht.

      Gruß,
      Julian

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Gelöschter Benutzer“ ()

      bisserl gehübscht:

      VB.NET-Quellcode

      1. Function CheckChecknumber(ByVal EAN As String) As Boolean
      2. Dim chars() As Char = EAN.Substring(0, EAN.Length - 1).ToCharArray
      3. Dim Multiplikator = 1
      4. Dim CheckNumber = 0
      5. Dim numb = 0
      6. For Each c In chars
      7. If Integer.TryParse(c, numb) Then
      8. CheckNumber += (numb Mod 10) * Multiplikator
      9. Multiplikator = If(Multiplikator = 1, 3, 1)
      10. End If
      11. Next
      12. Return 10 - (CheckNumber Mod 10) = Integer.Parse(EAN.Last)
      13. End Function
      • die böse Funktion IsNumeric durch .Net-gemäßeres ersetzt

      • Multiplikator-Umschaltung per einzeiligem If(,,)

      • VB.NET-Quellcode

        1. if bla then
        2. return true
        3. else
        4. return false
        5. end if
        auf einen einzeiler reduziert
      Sorry für das öffnen dieses Uralt Thread. Allerdings funktioniert obiger Code einfach nicht.

      Im Eröffnungspost ist ein Fehler - das Ergebnis bei der Erstellung der Prüfziffer ist falsch.
      Der Fehler steckt in Zeile 39: ​Return (10 - CheckNumber) Mod 10
      Wie in Post 3 erwähnt, muss vom Ergebnis 10 abgezogen werden, also ​Return 10 - (CheckNumber Mod 10)

      Hier der gesamte Code in korrekt:

      VB.NET-Quellcode

      1. Function GetChecknumber(ByVal EAN As String) As Integer
      2. Dim Numbers() As Char = EAN.ToCharArray
      3. Dim Multiplikator As Integer = 1
      4. Dim CheckNumber As Integer = 0
      5. Dim numb = 0
      6. For Each c As Char In Numbers
      7. If Integer.TryParse(c, numb) Then
      8. CheckNumber += (numb Mod 10) * Multiplikator
      9. Multiplikator = If(Multiplikator = 1, 3, 1)
      10. End If
      11. Next
      12. Return 10 - (CheckNumber Mod 10)
      13. End Function