Der Code 39 ist eine ältere Codeart, die pro einem Codewort nur die Ziffern 0 bis 9, die Großbuchstaben A bis Z und die Zeichen "space $ % + - . /" kodieren kann.       
(space steht f√ľr das Leerzeichen bzw. Leerschritt)

Es gibt den erweiterten ASCII Modus. Von der Anwendung ist aber abzuraten, da pro Zeichen 2 Codewörter notwendig sind.

Ein Zeichen wird immer in 5 Strichen und 4 L√ľcken kodiert. Zwischen¬† den Zeichen ist immer eine Trennl√ľcke (gelb in den Bildern hervorgehoben) enthalten, damit der letzte Strich eines Zeichens nicht direkt, ohne L√ľcke, auf den ersten Strich des folgenden Zeichens anschlie√üt. Bei anderen Codearten ist das geschickter gel√∂st. Ein Zeichen endet z.B. mit einer L√ľcke¬† und beginnt mit einem Strich. Eine Trennl√ľcke wie dies beim Code 39 zwingend ist wird dann nicht mehr ben√∂tigt.¬†¬†¬†¬†¬†¬†¬†

Anhand der folgenden neun, vollständigen Codes wird der kompette Zeichensatz des Code 39 gezeigt (das zehnte Codebild zeigt einen Sonderfall).

Die blauen Striche mit den dazwischenliegenden wei√üen L√ľcken sind jeweils das Start- und Stoppzeichen. Die Datenzeichen bestehen aus vier L√ľcken die rot dargestellt sind und 5 dunklen Strichen die schwarz dargestellt werden. Die gelben Striche sind die Trennl√ľcken (Gap oder intercharacter gap), die ben√∂tigt werden weil die Datenzeichen mit einem Strich beginnen und enden. Die Trennl√ľcken haben normalerweise die Breite von einem Modul. Erlaubt sind allerdings bis zu 5,3 Module. Diese Breitenvariation der Trennl√ľcke wird in der Praxis so gut wie nie benutzt. Die gro√üe Variation der Trennl√ľcke ist in den historischen Drucksystemen begr√ľndet, die den Code mit einer speziellen Schreibmaschine erzeugt haben.¬†¬†¬†¬†¬†¬†¬†

Unter jedem Code ist eine Tabelle eingef√ľgt die das Bitmuster der Zeichen zeigt. Eine 1 steht dabei f√ľr ein breites Element und eine 0 f√ľr ein schmales Element. Das Bitmuster wird in der Abfolge der Strich und L√ľcken gezeigt. Das erste Element ist immer ein Strich. (B - Balken, L = L√ľcke)

Code 39 01
Code 39 Bittabelle Ziffer 1 bis 5
ZeichenBLBLBLBLB
1100100001
2001100001
3101100000
4000110001
5100110000

 


Code39-02a

Code 39 Bittabelle Ziffer 6 bis 9 und 0
ZeichenBLBLBLBLB
6001110000
7000100101
8100100100
9001100100
0000110100

 


Code39-03a       
 

Code 39 Bittabelle Buchstaben A bis E
ZeichenBLBLBLBLB
A100001001
B001001001
C101001000
D000011001
E100011000



Code39-04a

Code 39 Bittabelle Buchtaben F bis J
ZeichenBLBLBLBLB
F001011000
G000001101
H100001100
I001001100
J000011100


Code39-05a

Code 39 Bittabelle Buchstaben K bis O
ZeichenBLBLBLBLB
K100000011
L001000011
M101000010
N000010011
O100010010


code39-06a       

 

Code 39 Bittabelle Buschstaben P bis T
ZeichenBLBLBLBLB
P001010010
Q000000111
R100000110
S001000110
T000010110


Code39-07a       
 

Code 39 Bittabelle Buchstaben U bis Y
ZeichenBLBLBLBLB
U110000001
V011000001
W111000000
X010010001
Y110010000


Code39-08a

Code 39 Bittabelle Buchstabe Z und Sonderzeichen
ZeichenBLBLBLBLB
Z011010000
SPACE011000100
$010101000
%000101010
+010001010


Code38-09a       

 

Code 39 Bittabelle Sonderzeichen
ZeichenBLBLBLBLB
-010000101
. (Punkt)110000100
/010100010


Das folgende Beispiel zeigt einen Code der dreimal das Zeichen "*" kodiert. Dieses Zeichen wird als Start und Stoppzzeichen benutzt. Innerhalb des Code darf das Zeichen nicht benutzt werden, weil der Scanner dann entweder an der falschen STelle anfängt zu dekodieren oder an der falschen Stelle aufhört. In einer geschlossenen Anwendung in der die Scannerauswahl unter Kontrolle ist könnte man Scanner aussuchen die so programmiert sind, dass das Start- bzw. Stoppzeichen im Code toleriert wird. in einer offenen Anwendung ist der Scannertyp nicht bekannt und daher ist ein Start/Stoppzeichen im Code verboten.       
 

Code39-10a       

 

Code 39 Bittabelle Start- und Stoppzeichen
ZeichenBLBLBLBLB
* (Start und Stopp)010010100


Die gelben Striche sind die Trennl√ľcken (engl Intercharacter Gap abgek√ľrzt Ig).¬†¬†¬†¬†¬†¬†¬†

Alle Beispiele sind als vollst√§ndige Codes gezeigt. Es handelt sich aber nur um Prinzipbilder, die lesbar sein k√∂nnen aber nicht m√ľssen.

Der Code 39 geh√∂rt zu Kategorie der Codearten mit 2 Strichbreiten. Der breite Strich darf zwischen 2 bis 3 mal breiter sein als der d√ľnne Strich. Das Verh√§ltnis zwischen d√ľnnen und breiten Strich wird als Ratio bezeichnet.¬†¬†¬†¬†¬†¬†¬†
Links und rechts des Strichcodes muss ein heller Bereich freibleiben. Man bezeichnet diesen hellen Bereich als Ruhezone oder Hellfeld. Die Mindestbreite des Hellfeldes ist eine relative Angabe in Bezug auf die Idealbreite eines d√ľnnen Striches (Modulbreite). Mindestens 10 x der Breite des schmalen Striches muss links wie auch rechts des Codes freibleiben.¬†¬†¬†¬†¬†¬†¬†
Der Code kann eine Pr√ľfziffer beinhalten. Diese wird √ľblicherweise in dem Modulo 43 Verfahren berechnet. Wenn nur Ziffern kodiert werden dann wird auch Modulo 10 verwendent.¬†¬†¬†¬†¬†¬†¬†

Der Code ist in einer ISO/IEC Norm normiert: ISO/IEC 16388       
 


Die Anf√§lligkeit gegen zu kurzes Lesen ist deutlich geringer als bei dem¬† 2/5i Code. Dies begr√ľndet sich dadurch, dass das Start- und Stoppzeichen genauso aufgebaut ist wie ein Datenzeichen und keine Teilmenge eines Datenzeichens ist.¬† Die Muster des Start- und Stoppzeichens (Blaue Striche, gelbe L√ľcken in den Bildern) wiederholen sich oft mehrfach in einem Code. Man sollte daher einen waagerechten Strich √ľber und unter dem Code drucken der jeweils deutlich breiter ist als ein breiter Strich im Code. Des weiteren sollte der Scanner nur die L√§nge des Codes akzeptieren die vorgesehen ist.¬†¬†¬†¬†¬†¬†¬†
Die Pr√ľfziffer ist auch mit Modulo 43 nur ein geringer Schutz gegen das Erkennen von fehlerhaften Lesungen.¬†¬†¬†¬†¬†¬†¬†

Die gr√∂√üte Schw√§che des Code 39 ist sein immenser Platzbedarf. Man st√∂√üt daher bei geringf√ľgig erh√∂hten Datenmengen¬† sehr schnell an Grenzen.¬†¬†¬†¬†¬†¬†¬†

Die Codeversion Code 39 Full ASCII erlaubt die Kodierung von Kleinbuchstaben. Dazu wird immer ein Zeichenpärchen aus z.B. $ und einem Großbuchstaben benutzt. Diese Kombination wird vom Scanner in ein Zeichen gewandelt. Der Scanner muss auf auf Code39 Full ASCII eingestellt sein. Der ohnehin schon sehr große Code wird noch einmal doppelt so groß. Die Code 39 Full ASCII Version sollte daher vermieden werden. Der Code 128 kodiert den vollen ASCII Zeichensatz viel effektiver.