Kody kreskowe

Transkrypt

Kody kreskowe
Kody kreskowe
Jarosław Marek Gliwiński
#indeksu 74839
4 października 2009
1
Wstęp
Celem ćwiczenia było wprowadzenie w tematykę najpopularniejszych standardów jednowymiarowych kodów kreskowych. Środkami prowadzącymi było wprowadzenie teoretyczne polegające na przeglądzie metod kodowania stosowanych w tych standardach oraz prezentacja
ich implementacji w postaci generatora kodów kreskowych kod.exe autorstwa studentów Wydziału Elektroniki i Telekomunikacji Politechniki Poznańskiej. Aplikacja pozwala na generację
wizualizacji na podstawie wprowadzonego tekstu następujących standardów kodów:
• EAN-8
• EAN-13
• EAN-128
• Code 39
Drugorzędnym celem było sprawdzenie poprawności działania programu przez porównanie
z darmowo dostępnymi narzędziami do generacji kodów kreskowych.
2
2.1
Zasady kodowania
EAN-8 oraz EAN-13
Kod posiada znaki Start/Stop na początku i końcu. Występuje w nim również znak rozdzielający. Pojedyncza cyfra jest zakodowana przez siedmiobitową sekwencję kresek czarnych
i białych. W każdej występują po dwa czarne i białe paski. W kodzie EAN-13 pierwsza cyfra
nie jest kodowana przy pomocy pasków, natomiast kolejne sześć (po lewej stronie od znaku
rozdzielającego) jest kodowana według zbioru A lub B. Pierwsza niekodowana bezpośrednio cyfra jest określana na podstawie kombinacji znaków kodowanych według zbiorów A i B. Cyfry
po prawej stronie są kodowane według zbioru C (występują jedynie te trzy zbiory). W kodzie EAN-8 cztery pierwsze cyfry są kodowane według zbioru A, natomiast pozostałe według
zbioru C. Dzięki zastosowaniu tej techniki możliwy jest obustronny odczyt kodu. Kodowanie
poszczególnych znaków przedstawia tabela 1.
1
znak
0
1
2
3
4
5
6
7
8
9
lewa strona
A
B
0001101 0100111
0011001 0110011
0010011 0011011
0111101 0100001
0100011 0011101
0110001 0111001
0101111 0000101
0111011 0010001
0110111 0001001
0001011 0010111
prawa strona
C
1110010
1100110
1101100
1000010
1011100
1001110
1010000
1000100
1001000
1110100
Tabela 1: Kodowanie cyfr 0-9 w EAN. Zero oznacza biały pasek, jedynka czarny
2.2
CODE-39
Wykorzystując podstawową wersję kodu można zakodować 43 znaki alfanumeryczne (w
tym 0-9, A-Z) 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 też nazwa – „code 39” to „kod 3 z 9”.
Stosunek szerokości pasków grubych do cienkich musi mieścić się w przedziale od 2:1 do 3:1.
Przykładowe kody zawiera tabela 2, zaś legenda odczytu tejże – w tabeli 3.
znak
0
1
2
3
4
5
6
7
8
9
kod
bwbWBwBwb
BwbWbwbwB
bwBWbwbwB
BwBWbwbwb
bwbWBwbwB
BwbWBwbwb
bwBWBwbwb
bwbWbwBwB
BwbWbwBwb
bwBWbwBwb
Tabela 2: Kodowanie cyfr CODE-39
Litera
B
b
W
w
Pasek
szeroki – czarny
wąski – czarny
szeroki – biały
wąski – biały
Tabela 3: Legenda do tabeli 2
2
2.3
EAN-128
Kod kreskowy EAN-128 został oparty na popularnym standardzie CODE 128. Właściwie
jedyna istotna różnica polega na tym, że pierwszym znakiem po znaku startowym jest symbol
FNC1 – przewidziany w standardzie. Każdy znak Kodu 128 składa się z 11 czarnych i białych
modułów (wykorzystuje zatem 11 bitów). Wyjątkiem jest znak Stop, który składa się z 13
modułów. 11 modułów musi tworzyć następujący schemat - Pasek Przerwa Pasek Przerwa
Pasek Przerwa o długości od 1 do 4 modułów każdy. Kody EAN-128 umożliwiają zakodowanie
tego samego ciągu w różny sposób. Podobnie jak w EAN-8 i EAN-13 występują kody A, B i
C – przykładowe kody znaków przedstawia tabela 4.
Numer
16
17
18
19
20
21
22
23
24
25
znak w A
0
1
2
3
4
5
6
7
8
9
znak w B
0
1
2
3
4
5
6
7
8
9
znak w C
16
17
18
19
20
21
22
23
24
25
paskiprzerwy (szerokości na przemian)
123122
123221
223211
221132
221231
213212
223112
312131
311222
321122
Tabela 4: Kodowanie cyft EAN-128
3
Porównianie
Porównano wyniki działania programu kod.exe z darmowym dostępnym w internecie generatorem kodów kreskowych TBarCode.
3.1
EAN-8 oraz EAN-13
Program textttkod.exe nieprawidłowo generuje kody EAN-8 dla znaków w „prawej połowie”
kodu. Wynika to z zastosowania do ich zakodowania sposobu A, podczas gdy należy je kodowac
sposobem C. Widoczne jest to dla przykładów zaprezentowanych na rysunku 1. W przypadku
EAN-13 wyniki były prawidłowe (Rys. 2).
(a) generator „studencki”
(b) generator „internetowy”
Ryc. 1: Wyniki kodowania sekwencji 12345678 w EAN-8
3
(a) generator „studencki”
(b) generator „internetowy”
Ryc. 2: Wyniki kodowania sekwencji 1234567890123 w EAN-13
3.2
CODE-39
Obydwa programy prawidłowo wygenerowały testowy łańcuch znaków. Wyniki przedstawiono na rys. 3.
(a) generator „studencki”
(b) generator „internetowy”
Ryc. 3: Wyniki kodowania sekwencji COSTAM2 w CODE-39
3.3
EAN-128
Obydwa programy prawidłowo wygenerowały testowy łańcuch znaków. Wyniki przedstawiono na rys. 4. Co prawda tym razem można dostrzec pewne różnice, jednak jest to spowodowane róznymi formatami kodowania znaków w obu generatorach – jednak w obydwu
przypadkach są to formaty poprawne.
(a) generator „studencki”
(b) generator „internetowy”
Ryc. 4: Wyniki kodowania sekwencji costam w EAN-128
4
Podsumowanie
Program kod.exe jest prosty w obsłudze, jednak ilość dostępnych w nim standardów kodowania oraz, przede wszystkim, poprawność implementacji pozostawiają wiele do życzenia.
Wyniki w przypadku EAN-8 są niepoprawne, co pokrótce opisano w punkcie 3.1. To pozostawia
3 poprawnie obsługiwane standardy, podczas gdy przeciętny darmowo dostępny w Internecie
generator oferuje przynajmniej kilkanaście. Aby nie pozostać gołosłownym – dla pierwszych
siedmiu wyników zapytania „barcode generator” w google średnia liczba obsługiwanych standardów to 37.4 ± 27.3 – średnio dziesięciokrotnie więcej. Dodatkowo warto odnotować mniej
istotny mankament związany z praktycznością zastosowania – program „studencki” nie generuje grafik z teskstem łatwo odczytywalnym przez człowieka, a w przypadku wyboru niektórych
opcji generowany jest obraz o szerokości większej niż szerokość okna aplikacji, przy czym tego
ostatniego nie można poszerzać i część kodu pozostaje niewidoczna.
4

Podobne dokumenty