Code 39
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:
Format1 | Format2 | Pasek |
---|---|---|
W | B | szeroki – czarny |
N | b | wąski – czarny |
w | W | szeroki – biały |
n | w | wąski – biały |
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.
|
|
|
|
Linki zewnętrzne
[edytuj | edytuj kod]- 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