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.