AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Barcode generieren falsche Infos

Ein Thema von roboter202 · begonnen am 8. Mär 2011 · letzter Beitrag vom 10. Mär 2011
Antwort Antwort
roboter202

Registriert seit: 6. Mär 2011
98 Beiträge
 
Delphi 6 Professional
 
#1

Barcode generieren falsche Infos

  Alt 8. Mär 2011, 18:42
Hallo,

Ich arbeite gerade an einem kleinen Programm das aus der Bei Google suchenEAN-13 Nummer den Strichcode generiert

soweit kein Problem die Informationen zu Verfahren habe ich aus Wikipedia

Ganz grob
es gibt 2 Teile den Vorderen und den Hinteren zu jeder Zahl gibt es 3 Kodierungstypen (A,B,C) C wird im hinteren Teil verwendet und A / B im vorderen wobei die Zahl als auch die Position entscheidet ob A/B verwendet wird.

Bis jetzt definiere ich die Typen als Konstanten
Delphi-Quellcode:
const
  a0 = '0001101';
  b0 = '0100111';
  c0 = '1110010';

  a1 = '0011001';
  b1 = '0110011';
  c1 = '1100110';

  a2 = '0010011';
  b2 = '0011011';
  c2 = '1101100';

  a3 = '0111101';
  b3 = '0100001';
  c3 = '1000010';

  a4 = '0100011';
  b4 = '0011101';
  c4 = '1011100';

  a5 = '0110001';
  b5 = '0111001';
  c5 = '1001110';

  a6 = '0101111';
  b6 = '0000101';
  c6 = '1010000';

  a7 = '0111011';
  b7 = '0010001';
  c7 = '1000100';

  a8 = '0110111';
  b8 = '0001001';
  c8 = '1001000';

  a9 = '0001011';
  b9 = '0010111';
  c9 = '1110100';
Aus dem Eingegbenen Code filtere ich Teil 1 (Zeichen 2-7) und Teil 2 (Zeichen 8-13) heraus und speicher diese in den Strings part1 und part2 nun kodiere ich die Teile

Delphi-Quellcode:
//Code generieren
output := '101' ; //Randzeichen

For i := 1 to 6 do
begin
  case part1 [i] of
    '0' : begin
        case i of
          1 : output := output + a0 ;
          2 : output := output + a0 ;
          3 : output := output + a0 ;
          4 : output := output + a0 ;
          5 : output := output + a0 ;
          6 : output := output + a0 ;
          end;
        end;
    '1' : begin
        case i of
          1 : output := output + a1 ;
          2 : output := output + a1 ;
          3 : output := output + b1 ;
          4 : output := output + a1 ;
          5 : output := output + b1 ;
          6 : output := output + b1 ;
          end;
        end;
    '2' : begin
        case i of
          1 : output := output + a2 ;
          2 : output := output + a2 ;
          3 : output := output + b2 ;
          4 : output := output + b2 ;
          5 : output := output + a2 ;
          6 : output := output + b2 ;
          end;
        end;
    '3' : begin
        case i of
          1 : output := output + a3 ;
          2 : output := output + a3 ;
          3 : output := output + b3 ;
          4 : output := output + b3 ;
          5 : output := output + b3 ;
          6 : output := output + a3 ;
          end;
        end;
    '4' : begin
        case i of
          1 : output := output + a4 ;
          2 : output := output + b4 ;
          3 : output := output + a4 ;
          4 : output := output + a4 ;
          5 : output := output + b4 ;
          6 : output := output + b4 ;
          end;
        end;
    '5' : begin
        case i of
          1 : output := output + a5 ;
          2 : output := output + b5 ;
          3 : output := output + b5 ;
          4 : output := output + a5 ;
          5 : output := output + a5 ;
          6 : output := output + b5 ;
          end;
        end;
    '6' : begin
        case i of
          1 : output := output + a6 ;
          2 : output := output + b6 ;
          3 : output := output + b6;
          4 : output := output + b6 ;
          5 : output := output + a6 ;
          6 : output := output + a6 ;
          end;
        end;
    '7' : begin
        case i of
          1 : output := output + a7 ;
          2 : output := output + b7 ;
          3 : output := output + a7 ;
          4 : output := output + b7 ;
          5 : output := output + a7 ;
          6 : output := output + b7 ;
          end;
        end;
    '8' : begin
        case i of
          1 : output := output + a8 ;
          2 : output := output + b8 ;
          3 : output := output + a8 ;
          4 : output := output + b8 ;
          5 : output := output + b8 ;
          6 : output := output + a8 ;
          end;
        end;
    '9' : begin
        case i of
          1 : output := output + a9 ;
          2 : output := output + b9 ;
          3 : output := output + b9 ;
          4 : output := output + a9 ;
          5 : output := output + b9 ;
          6 : output := output + a9 ;
          end;
        end;
    end;
end;

output := output + '01010'; //Trennzeichen

For i := 1 to 6 do
begin
  case part2 [i] of
    '0' : output := output + c0 ;
    '1' : output := output + c1 ;
    '2' : output := output + c2 ;
    '3' : output := output + c3 ;
    '4' : output := output + c4 ;
    '5' : output := output + c5 ;
    '6' : output := output + c6 ;
    '7' : output := output + c7 ;
    '8' : output := output + c8 ;
    '9' : output := output + c9 ;
  end;
end;

output := output + '101' ; //Randzeichen
und erhalte nachher im String Output eine Ziffernfolge (0100110...) wobei die 0 für Freiräume und die 1 für Balken steht. Diese kann ich dann als Bild in der Komponente Image1 ausgeben

Delphi-Quellcode:
//Bild ausgeben
For i := 0 to image1.Height do
  begin
  For j := 0 to 95 do
    begin
    If output[j+1] = '1then
      begin
      Image1.Canvas.Pixels[j*2,i] := clblack ;
      Image1.Canvas.Pixels[j*2+1,i] := clblack ;
      end;
    If output[j+1] = '0then
      begin
      Image1.Canvas.Pixels[j*2,i] := clwhite ;
      Image1.Canvas.Pixels[j*2+1,i] := clwhite ;
      end;
    end;
  end;
Das Klappt auch alles sehr gut jedoch habe ich das Gefühl das ich falsche Informationen von Wikipedia erhalte denn wenn ich es mit einen Barcode teste stimmt das Bild nicht mit dem Soll überein

ich habe bereist auf anderen Seiten nach den Codes und Tabellen zur Nutzung von Code A/B gesucht jedoch auch hier die gleichen (falschen Ergebnisse) gefunden


Außerdem widerspricht sich Wikipedia selbst denn im Beispiel wir die 0 an 1. und 2. Stelle unterschiedlich Codiert obwohl beides mal der Code LINKS ungerade (A) genutzt werden müsste.



Nun suche ich nach richtigen Informationen oder einem Fehler in meinen Source-Code und würde mich sehr freuen wenn mir jemand einen Tipp gibt.

Gruß
Christian
Christian
i := 0 ; While i = 0 do beep ;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Barcode generieren falsche Infos

  Alt 8. Mär 2011, 20:03
Du hast deine Logik ja auch nicht genau nach den Vorgaben der Wikipedia umgesetzt

Nehmen wir mal den Code
Code:
1111111111111
dann müsste laut Wikipedia der Code wie folgt zusammengebaut werden:
Code:
a1 a1 b1 a1 b1 b1 c1 c1 c1 c1 c1 c1
und
Code:
10000000000000
müsste so aussehen
Code:
a0 a0 b0 a0 b0 b0 c0 c0 c0 c0 c0 c0
denn abhängig von der linken Ziffer (13. Stelle) wird im linken Block zwischen Gerade und Ungerade umgeschaltet.

Dieses hast du sehr frei (und falsch) umgesetzt
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Bernerbaer
(Gast)

n/a Beiträge
 
#3

AW: Barcode generieren falsche Infos

  Alt 8. Mär 2011, 20:19
hier gibt es ein fertiges Beispiel inkl. Delphi Source
  Mit Zitat antworten Zitat
roboter202

Registriert seit: 6. Mär 2011
98 Beiträge
 
Delphi 6 Professional
 
#4

AW: Barcode generieren falsche Infos

  Alt 10. Mär 2011, 18:54
Oh man

Danke das hab ich übersehen

Ich := doof ;
Christian
i := 0 ; While i = 0 do beep ;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz