Code 39

Z Wikipedii, wolnej encyklopedii
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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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)[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]