Prüfzifferberchung Code 128

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Axxxxxl.

    Prüfzifferberchung Code 128

    Hallo zusammen,

    ich habe hier im Forum den Beitrag gefunden:
    Spoiler anzeigen

    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


    Damit kann man eine EAN Prüfziffer für einen EAN Barcode berechnen. Das ist im Prinzip dass was ich auch machen will aber ich bräuchte das für Code 128. Und dafür werden die Prüfziffern per "Modulo 103" berechnet. Kann mir jemand helfen, wie ich die obige Funktion diesbezüglich umändern muss?

    Danke für jeden Tipp!
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    ich bräuchte das für Code 128
    Der ist wie definiert?
    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!
    Prüfziffernberechnung Code 128
    Die Prüfziffer wird nach Modulo 103 berechnet.
    Jedem Zeichen sind Referenzzahlen zugeordnet, wie auch den 3 Startzeichen. Die Gewichtung beginnt mit 1 bei dem ersten Nutzzeichen (von links nach rechts) und erhöht sich um 1 nach jedem
    weiteren.
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    Prüfziffernberechnung Code 128

    Wiki schrieb:

    Der Code 128 ist in der internationalen Norm ISO/IEC 15417 vollständig beschrieben.

    de.wikipedia.org/wiki/Code128
    Damit ist das numerisch und juristisch determiniert, was bedeutet, dass ein solcher Code "juristisch sicher" sein muss, das ist nicht Aufgabe dieses Forums.
    /Close Request.
    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!
    ?!????
    Was hat das bitte mit meiner Frage zu tun ?!?!
    Ich möchte ein Programm schreiben, bei dem ich für eine Zeichenfolge aus einer Textbox, welche den Code128 repräsentiert, die zugehörige Prüfziffer errechnen kann. Die Funktion welche ich oben zitiert habe macht das zwar für einen EAN Code, aber nicht für Code 128, da für diesen ein anderes "Modulo" genutzt wird.

    Was hat das nun mit "juristischer Sicherheit" usw. zu tun, Rod?!?!?!?
    Ich muss echt mal anmerken, dass dieses Forum hier, so nützlich es inhaltlich auch ist, gleichzeitig ganz weit vorn liegt, dass man sich spätestens nach dem 2.-3. Post einen Kommentar einfängt der belehrend und völlig themenfremd ist oder es entbrennt ein Streit über Inhalte, Suchfunktionen, Rechtschreibung und all solchen Kram! :-/
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    "juristischer Sicherheit"
    Wenn Du aufgrund von Hilfe hier einen Code entwickelst und veröffentlichst, dessen Algorithmus möglicherweise nicht korrekt ist, wäre es möglich, dass ...
    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!
    Ich möchte doch keinen Code veröffentlichen oder neu erfinden?!
    Wenn die Berechung / Zusammensetzung eines Code128B (wie in meinem Falle) öffentlich zugänglich ist und dort u.a. auch steht, wie die Prüfziffer für so einen Code errechnet wird, dann kann es doch nicht verboten sein, ein Programm zu schreiben was so einen Code generiert. Mittlerweile bin ich aber fündig geworden für alle Interessierten:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Shared Function GetCode128BString(textToConvert As String) As String
    2. ' Diese Methode wandelt den übergebenen String in einen String um, welcher mit Hilfer einer Code128-Schrift
    3. ' * ausgegeben werden kann. Es wird ein Start- und Endzeichen eingefügt und die erforderliche Prüfsumme
    4. ' * berechnet.
    5. Dim convertCharArray As Char() = textToConvert.ToCharArray()
    6. Dim startSign As Char = ChrW(204), endSign As Char = ChrW(206)
    7. Dim barcodeString As String = startSign.ToString()
    8. Dim index As Integer = 1
    9. ' Multiplikator zum Berechnen der Prüfsumme
    10. Dim checkDigitValue As Integer = 104
    11. ' Code 128B erfordert einen Startwert von 104
    12. ' Inhalt des zu codierenden Strings zeichenweise wieder zum Ergebnisstring hinzufügen und dabei die
    13. ' * Prüfsumme mitberechnen. Enthält der zu codierende String ein Zeichen, welches sich nicht im gültigen
    14. ' * ACSII-Bereich befindet, wird der Vorgang abgebrochen und ein leerer String zurückgegeben.
    15. For Each c As Char In convertCharArray
    16. If (AscW(c) < 32) OrElse (AscW(c) > 126) Then
    17. Return String.Empty
    18. End If
    19. barcodeString += c.ToString()
    20. checkDigitValue += (AscW(c) - 32) * index
    21. index += 1
    22. Next
    23. ' Das Prüfzeichen bei Code128B setzt sich aus dem Rest der Division durch 103 zusammen.
    24. checkDigitValue = checkDigitValue Mod 103
    25. If checkDigitValue > 94 Then
    26. checkDigitValue += 100
    27. Else
    28. checkDigitValue += 32
    29. End If
    30. ' Prüfzeichen und Endzeichen zum Ergebnisstring hinzufügen
    31. barcodeString += (ChrW(checkDigitValue)).ToString() & endSign.ToString()
    32. Return barcodeString
    33. End Function
    ==> seid .net zueinander :D <3 <==
    Hi @TE!

    Also ich hab vor gut einem halben Jahr ne schöne Barcode Lib gefunden(auf codeproject.com). Wenn du eine Implementation sehen willst, die auf jeden fall funzt, dann lad die dir e sourcen runter, schau unter "Symbologies" in "Code128.cs" nach. Da gibts eine Funktion private string CalculateCheckDigit(), die dir das CheckDigit ausrechnet.
    Hier ist einfach mal der Code (wird dir jetzt zwar auf Anhib nix bringen, aber wie gesagt, lad die die sourcen runter und schau dir den GANZEN Code mal an ;D

    C#-Quellcode

    1. private string CalculateCheckDigit()
    2. {
    3. string currentStartChar = _FormattedData[0];
    4. uint CheckSum = 0;
    5. for (uint i = 0; i < _FormattedData.Count; i++)
    6. {
    7. //replace apostrophes with double apostrophes for escape chars
    8. string s = _FormattedData[(int)i].Replace("'", "''");
    9. //try to find value in the A column
    10. DataRow[] rows = this.C128_Code.Select("A = '" + s + "'"); //Ok, muss ich noch erwähnen: Intern arbeitet der Ersteller mit einer DatatTable
    11. //try to find value in the B column
    12. if (rows.Length <= 0)
    13. rows = this.C128_Code.Select("B = '" + s + "'");
    14. //try to find value in the C column
    15. if (rows.Length <= 0)
    16. rows = this.C128_Code.Select("C = '" + s + "'");
    17. uint value = UInt32.Parse(rows[0]["Value"].ToString());
    18. uint addition = value * ((i == 0) ? 1 : i);
    19. CheckSum += addition;
    20. }//for
    21. uint Remainder = (CheckSum % 103);
    22. DataRow[] RetRows = this.C128_Code.Select("Value = '" + Remainder.ToString() + "'");
    23. return RetRows[0]["Encoding"].ToString();
    24. }


    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell