Code 39

Przykład zapisu znaków alfanumerycznych w kodzie „Code39”. Znaki „*” są oznaczeniami Start/Stop, natomiast „$” jest znakiem kontrolnym wyliczonym na podstawie modulo43

Code 39 (znany też jako „USS Code 39”, „Code 3/9”, „Kod 3 z 9”, „USD-3”, „Alpha39”) – alfanumeryczny kod kreskowy o stałej szerokości pojedynczego znaku. Kod ten powstał w 1974 roku, a rozpowszechnił się po zastosowaniu go przez Departament Obrony USA do oznaczania przesyłek od dostawców. Obecnie jest wykorzystywany w branży motoryzacyjnej do oznaczania części. Największą wadą kodu jest stosunkowo mała gęstość zapisu danych. Z tego względu kod ten nie nadaje się do umieszczania na małych przedmiotach. Zaletą kodu jest fakt, iż może on zostać odczytany przez prawie każdy czytnik kodów kreskowych.

Budowa kodu

Wykorzystując podstawową wersję kodu można zakodować 43 znaki alfanumeryczne (duże litery od A do Z, cyfry, znaki specjalne: -, ., spacja, $, /, +, %) oraz symbol *, który służy do oznaczenia początku i końca kodu. Każdy znak składa się z dziewięciu pasków (występuje na przemian 5 pasków czarnych i 4 paski białe), przy czym 3 spośród nich mają większą szerokość (stąd nazwa kod 3 z 9). Stosunek szerokości pasków grubych do cienkich musi mieścić się w przedziale od 2:1 do 3:1.

W podstawowej wersji kod nie zawiera sumy kontrolnej. Jednakże jest on tak skonstruowany, iż pojedynczy błędnie odczytany pasek nie spowoduje rozpoznania znaku jako innego.

Tablica znaków

Znak * jest wykorzystywany jedynie do oznaczenia początku i końca kodu. Ze względu na jego asymetryczną postać czytnik kodów kreskowych jest w stanie określić kierunek odczytu kodu.

Poniższa tabela prezentuje sposób zapisu wszystkich 44 znaków kodowanych w Kodzie 3 z 9:

Legenda
Format1 Format2 Pasek
W B szeroki – czarny
N b wąski – czarny
w W szeroki – biały
n w wąski – biały
Tablica znaków
Wartość Znak Format1 Format2
0 0 NnNwWnWnN bwbWBwBwb
1 1 WnNwNnNnW BwbWbwbwB
2 2 NnWwNnNnW bwBWbwbwB
3 3 WnWwNnNnN BwBWbwbwb
4 4 NnNwWnNnW bwbWBwbwB
5 5 WnNwWnNnN BwbWBwbwb
6 6 NnWwWnNnN bwBWBwbwb
7 7 NnNwNnWnW bwbWbwBwB
8 8 WnNwNnWnN BwbWbwBwb
9 9 NnWwNnWnN bwBWbwBwb
10 A WnNnNwNnW BwbwbWbwB
11 B NnWnNwNnW bwBwbWbwB
12 C WnWnNwNnN BwBwbWbwb
13 D NnNnWwNnW bwbwBWbwB
14 E WnNnWwNnN BwbwBWbwb
15 F NnWnWwNnN bwBwBWbwb
16 G NnNnNwWnW bwbwbWBwB
17 H WnNnNwWnN BwbwbWBwb
18 I NnWnNwWnN bwBwbWBwb
19 J NnNnWwWnN bwbwBWBwb
20 K WnNnNnNwW BwbwbwbWB
21 L NnWnNnNwW bwBwbwbWB
22 M WnWnNnNwN BwBwbwbWb
23 N NnNnWnNwW bwbwBwbWB
24 O WnNnWnNwN BwbwBwbWb
25 P NnWnWnNwN bwBwBwbWb
26 Q NnNnNnWwW bwbwbwBWB
27 R WnNnNnWwN BwbwbwBWb
28 S NnWnNnWwN bwBwbwBWb
29 T NnNnWnWwN bwbwBwBWb
30 U WwNnNnNnW BWbwbwbwB
31 V NwWnNnNnW bWBwbwbwB
32 W WwWnNnNnN BWBwbwbwb
33 X NwNnWnNnW bWbwBwbwB
34 Y WwNnWnNnN BWbwBwbwb
35 Z NwWnWnNnN bWBwBwbwb
36 - NwNnNnWnW bWbwbwBwB
37 . WwNnNnWnN BWbwbwBwb
38 (spacja) NwWnNnWnN bWBwbwBwb
39 $ NwNwNwNnN bWbWbWbwb
40 / NwNwNnNwN bWbWbwbWb
41 + NwNnNwNwN bWbwbWbWb
42 % NnNwNwNwN bwbWbWbWb
* NwNnWnWnN bWbwBwBwb

Pomiędzy znakmi wstawiany jest dodatkowy wąski biały pasek. Nie zostało to co prawda określone w standardzie, jednakże czytniki mogą nie odczytać kodu, który nie zawiera takich przerw. Dla przykładu kod składający się z litery „A” będzie wyglądał następująco: „[bWbwBwBwb]w[BwbwbWbwB]w[bWbwBwBwb]” i zostanie odczytany jako „*A*”.

Suma kontrolna (Code 39 mod 43)

Czasem do kodu 3 z 9 dodawana jest dodatkowa suma kontrolna (odmiana kodu: Code 39 mod 43). Oblicza się ją następująco:

  • Sumuje się wartości (od 0 do 42) wszystkich znaków występujących w kodzie (z wyjątkiem znaków start/stop)
  • Od wyniku oblicza się wartość modulo 43
  • Otrzymany wynik jest wartością znaku sumy kontrolnej

Znak sumy kontrolnej dopisuje się do kodu przed znakiem stopu.

W Visual Basicu można przedstawić to w następujący sposób:

Const charSet As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
Function Mod43(C39 As String) As String
  For i = 1 To Len(C39)
    total = InStr(charSet, Mid(C39, i, 1)) - 1 + total
  Next i
  Mod43 = C39 & Mid$(charSet, (total Mod 43 + 1), 1)
End Function

Zapis całej tablicy znaków ASCII w Code 39

Istnieje rozwinięcie kodu 3 z 9 (Code 39 plus) pozwalające zakodować wszystkie 128 znaków kodu ASCII. Znacznik początku i końca kodu oraz 39 standardowych znaków (A–Z, 0–9, -, . i spacja) kodowanych jest identycznie, jak w odmianie podstawowej. Pozostałe symbole reprezentowane są przez sekwencje dwóch znaków podstawowych.

Kodowanie Code 39 plus
Nr Znak Kodowanie
0 NUL %U
1 SOH $A
2 STX $B
3 ETX $C
4 EOT $D
5 ENQ $E
6 ACK $F
7 BEL $G
8 BS $H
9 HT $I
10 LF $J
11 VT $K
12 FF $L
13 CR $M
14 SO $N
15 SI $O
16 DLE $P
17 DC1 $Q
18 DC2 $R
19 DC3 $S
20 DC4 $T
21 NAK $U
22 SYN $V
23 ETB $W
24 CAN $X
25 EM $Y
26 SUB $Z
27 ESQ %A
28 FS %B
29 GS %C
30 RS %D
31 US %E
Nr Znak Kodowanie
32 [spacja] [spacja]
33 ! /A
34 " /B
35 # /C
36 $ /D
37 % /E
38 & /F
39 ' /G
40 ( /H
41 ) /I
42 * /J
43 + /K
44 , /L
45 - -
46 . .
47 / /O
48 0 0
49 1 1
50 2 2
51 3 3
52 4 4
53 5 5
54 6 6
55 7 7
56 8 8
57 9 9
58 : /Z
59 ; %F
60 < %G
61 = %H
62 > %I
63 ? %J
Nr Znak Kodowanie
64 @ %V
65 A A
66 B B
67 C C
68 D D
69 E E
70 F F
71 G G
72 H H
73 I I
74 J J
75 K K
76 L L
77 M M
78 N N
79 O O
80 P P
81 Q Q
82 R R
83 S S
84 T T
85 U U
86 V V
87 W W
88 X X
89 Y Y
90 Z Z
91 [ %K
92 \ %L
93 ] %M
94 ^ %N
95 _ %O
Nr Znak Kodowanie
96 ` %W
97 a +A
98 b +B
99 c +C
100 d +D
101 e +E
102 f +F
103 g +G
104 h +H
105 i +I
106 j +J
107 k +K
108 l +L
109 m +M
110 n +N
111 o +O
112 p +P
113 q +Q
114 r +R
115 s +S
116 t +T
117 u +U
118 v +V
119 w +W
120 x +X
121 y +Y
122 z +Z
123 { %P
124 | %Q
125 } %R
126 ~ %S
127 DEL %T

Linki zewnętrzne

  • Darmowy generator kodów Code 39
  • Generator kodów Code 39 online (ang.)
  • Specyfikacja Code 39 (ang.) na Morovii
  • Specyfikacja Code 39. barcodeisland.com. [zarchiwizowane z tego adresu (2006-10-23)]. (ang.). na BARCODE Island
  • Specyfikacja Code 39. barcodeman.com. [zarchiwizowane z tego adresu (2006-10-18)]. (ang.). na Barcode Man