Autor Beitrag
SvenZ
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 08.02.07 21:13 
Naja, dann versuchs mal so:

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


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

Aufruf mit IndexToChar(10)

Umgekehrt geht's so:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Do 08.02.07 21:19 
na das sieht ja mal sehr effektiv aus, werds morgen mal einbauen.
Danke Dir... :think:

_________________
mit freundlichen Grüßen
Sven
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Do 08.02.07 23:03 
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.

_________________
Gruß
Hansa
SvenZ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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.