Code 39
Z Wikipedii
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.
Spis treści |
[edytuj] 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.
[edytuj] 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 | |||
Wart. | 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 coprawda 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*".
[edytuj] 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 (za 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
[edytuj] Zapis całej tablicy znaków ASCII w Code 39
Istnieje rozwinięcie kodu 3 z 9 (Code 39 plus) pozwalające zakodować przy jego pomocy wszystkie 128 znaków kodu ASCII. 44 standardowe znaki kodowane są identycznie, jak w odmianie podstawowej. Natomiast pozostałe symbole reprezentowane są przez sekwencje dwóch znaków podstawowych.
Tablica | ||||||||||||||
Nr | Znak | Kodowanie | Nr | Znak | Kodowanie | Nr | Znak | Kodowanie | Nr | Znak | Kodowanie | |||
0 | NUL | %U | 32 | [spacja] | [spacja] | 64 | @ | %V | 96 | ` | %W | |||
1 | SOH | $A | 33 | ! | /A | 65 | A | A | 97 | a | +A | |||
2 | STX | $B | 34 | " | /B | 66 | B | B | 98 | b | +B | |||
3 | ETX | $C | 35 | # | /C | 67 | C | C | 99 | c | +C | |||
4 | EOT | $D | 36 | $ | /D | 68 | D | D | 100 | d | +D | |||
5 | ENQ | $E | 37 | % | /E | 69 | E | E | 101 | e | +E | |||
6 | ACK | $F | 38 | & | /F | 70 | F | F | 102 | f | +F | |||
7 | BEL | $G | 39 | ' | /G | 71 | G | G | 103 | g | +G | |||
8 | BS | $H | 40 | ( | /H | 72 | H | H | 104 | h | +H | |||
9 | HT | $I | 41 | ) | /I | 73 | I | I | 105 | i | +I | |||
10 | LF | $J | 42 | * | /J | 74 | J | J | 106 | j | +J | |||
11 | VT | $K | 43 | + | /K | 75 | K | K | 107 | k | +K | |||
12 | FF | $L | 44 | , | /L | 76 | L | L | 108 | l | +L | |||
13 | CR | $M | 45 | - | - | 77 | M | M | 109 | m | +M | |||
14 | SO | $N | 46 | . | . | 78 | N | N | 110 | n | +N | |||
15 | SI | $O | 47 | / | /O | 79 | O | O | 111 | o | +O | |||
16 | DLE | $P | 48 | 0 | 0 | 80 | P | P | 112 | p | +P | |||
17 | DC1 | $Q | 49 | 1 | 1 | 81 | Q | Q | 113 | q | +Q | |||
18 | DC2 | $R | 50 | 2 | 2 | 82 | R | R | 114 | r | +R | |||
19 | DC3 | $S | 51 | 3 | 3 | 83 | S | S | 115 | s | +S | |||
20 | DC4 | $T | 52 | 4 | 4 | 84 | T | T | 116 | t | +T | |||
21 | NAK | $U | 53 | 5 | 5 | 85 | U | U | 117 | u | +U | |||
22 | SYN | $V | 54 | 6 | 6 | 86 | V | V | 118 | v | +V | |||
23 | ETB | $W | 55 | 7 | 7 | 87 | W | W | 119 | w | +W | |||
24 | CAN | $X | 56 | 8 | 8 | 88 | X | X | 120 | x | +X | |||
25 | EM | $Y | 57 | 9 | 9 | 89 | Y | Y | 121 | y | +Y | |||
26 | SUB | $Z | 58 | : | /Z | 90 | Z | Z | 122 | z | +Z | |||
27 | ESQ | %A | 59 | ; | %F | 91 | [ | %K | 123 | { | %P | |||
28 | FS | %B | 60 | < | %G | 92 | \ | %L | 124 | | | %Q | |||
29 | GS | %C | 61 | = | %H | 93 | ] | %M | 125 | } | %R | |||
30 | RS | %D | 62 | > | %I | 94 | ^ | %N | 126 | ~ | %S | |||
31 | US | %E | 63 | ? | %J | 95 | _ | %O | 127 | DEL | %T |
[edytuj] Linki zewnętrzne
- (en) Zestaw fontów dla kodu 3 z 9 - licencja freeware
- (en) Generator kodów Code 39 online
- (en) Specyfikacja Code 39 na Morovii
- (en) Specyfikacja Code 39 na BARCODE Island
- (en) Specyfikacja Code 39 na Barcode Man