Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Prüfziffer für (Bar)Code39


SvenZ - Do 08.02.07 18:04
Titel: Prüfziffer für (Bar)Code39
Hallo,
ich möchte einen beliebigen String als Code39-BarCode drucken.
Dazu muß ich die Prüfziffer berechnen. Das geht über Modulo43.
Existiert da schon irgendwo ein Algorithmus (Delphi)?
Das Drucken hab ich im Griff, mir geht's bloß um den Prüfziffern-Alg.

Danke für Hilfe.


BenBE - Do 08.02.07 18:57

Wo hängst Du?

Die Prüfsummen-Berechnung ist doch im Wiki-Artikel beschrieben:
http://de.wikipedia.org/wiki/Code39

Wenn Du den Operator für Modulo suchst: mod ...


SvenZ - Do 08.02.07 20:42

den Algorithmus an sich kenne ich. Mein Problem ist die möglichst effektive programmtechnische Umsetzung, speziell der Wertetabelle, die ja in beide Richtungen funktionieren soll (also sowohl A=10, als auch 10=A)ohne ellenlange case Anweisungungen.


BenBE - Do 08.02.07 21:13

Naja, dann versuchs mal so:


Delphi-Quelltext
1:
2:
const
    Digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ...';


Von 10 nach A:

Delphi-Quelltext
1:
2:
3:
4:
Function IndexToChar(Index: Integer): Char;
Begin
    Result := Digits[Index];
end;

Aufruf mit IndexToChar(10)

Umgekehrt geht's so:

Delphi-Quelltext
1:
2:
3:
4:
Function CharToIndex(C: Char): Integer;
begin
    Result := Pos(C, Digits) - 1;
end;

Aufruf mit CharToIndex('A')


SvenZ - Do 08.02.07 21:19

na das sieht ja mal sehr effektiv aus, werds morgen mal einbauen.
Danke Dir... :think:


hansa - Do 08.02.07 23:03
Titel: Re: Prüfziffer für (Bar)Code39
Wo liegt denn genau das Problem ?

user profile iconSvenZ hat folgendes geschrieben:
Das Drucken hab ich im Griff, mir geht's bloß um den Prüfziffern-Alg.


Wozu wird dann die Prüfziffer noch gebraucht ? Das muss der Drucker können bzw. die Schriftart muss da sein, oder eine entsprechende Delphi-Komponente (-> TurboPower). Oder geht es nur um Interesse, wie so eine Prüfziffer aufgebaut ist ? :shock: Das wäre schlecht investierte Zeit.


SvenZ - Fr 09.02.07 09:08

@Hansa: ich brauch die Prüfziffer noch an anderen Stellen im Programm. Z.Bsp. soll der ausgedruckte Barcode dann per Scanner wieder eingelesen und ein Plausibilitätstest durchgeführt werden.


alzaimar - Fr 09.02.07 09:16

Die Prüfziffernprüfung erledigen die Scanner i.d.R. selbst. Dabei kannst Du meistens auch noch wählen, ob die Prüfziffer mit übertragen werden soll, oder nicht. Normalerweise interessiert mich die Prüfziffer nicht, also stelle ich den Scanner so ein, das die Prüfziffer abgeschnippelt wird.

Ehrlich gesagt, implementiere ich noch nicht einmal eine Prüfziffer: Code39 ist sicher genug (jedenfalls in meinen Anwendungen). Fehllesungen sind extrem selten und führen eigentlich immer zu einer Meldungen 'unbekannte Produktnummer'.