Autor |
Beitrag |
SvenZ
      
Beiträge: 18
|
Verfasst: Do 08.02.07 18:04
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.
_________________ mit freundlichen Grüßen
Sven
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 08.02.07 18:57
Wo hängst Du?
Die Prüfsummen-Berechnung ist doch im Wiki-Artikel beschrieben:
de.wikipedia.org/wiki/Code39
Wenn Du den Operator für Modulo suchst: mod ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
SvenZ 
      
Beiträge: 18
|
Verfasst: 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.
_________________ mit freundlichen Grüßen
Sven
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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')
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Zuletzt bearbeitet von BenBE am Do 08.02.07 21:51, insgesamt 2-mal bearbeitet
|
|
SvenZ 
      
Beiträge: 18
|
Verfasst: Do 08.02.07 21:19
na das sieht ja mal sehr effektiv aus, werds morgen mal einbauen.
Danke Dir... 
_________________ mit freundlichen Grüßen
Sven
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 08.02.07 23:03
Wo liegt denn genau das Problem ?
SvenZ 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 ?  Das wäre schlecht investierte Zeit.
_________________ Gruß
Hansa
|
|
SvenZ 
      
Beiträge: 18
|
Verfasst: 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.
_________________ mit freundlichen Grüßen
Sven
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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'.
_________________ Na denn, dann. Bis dann, denn.
|
|
|