|
| | | |
• IV.3 Kod kreskowy EAN, UPC, KodaBar •
- 3.1 Kod kreskowy EAN 8 i EAN 13.
- 3.2 Kod kreskowy UPC A i UPC E.
- 3.3 Kod kreskowy Kodabar.
| | | | |
|
| | |
|
3.1 Kod kreskowy EAN 8 i EAN 13.
EAN - Europejski Kod Towarowy (European Article Numbering).
- kod numeryczny odwzorowujący wyłącznie cyfry od 0 do 9,
- ma dwie wersje podstawowe:
wersja pełna - kod kreskowy EAN 13
wersja skrócona - kod kreskowy EAN 8
oraz dodatkowo tzw. kody krótkie, kodujące od 1 do 7 znaków danych
- obligatoryjnie występuje w nim (na ostatnim miejscu) cyfra kontrolna, którą oblicza się w/g określonego algorytmu,
- kod kreskowy EAN 13 koduje 12 znaków w postaci kresek, w tym 11 znaków danych.
• pierwszy znak (po lewej stronie znaku Start) nie jest kodowany przy pomocy kresek, określany jest poprzez wzorzec następujących po niej sześciu znaków,
• ostatni znak (bezpośrednio przed znakiem Stop i kodowany w postaci kresek) jest liczbą kontrolną,
- kod kreskowy EAN 8 koduje 8 znaków w tym 7 znaków danych + liczba kontrolna,
- budowa jest modułowa - każdy znak (cyfra) zbudowany jest z 7-miu modułów, a nominalna szerokość modułu wynosi 0,33 mm. Szerokość pojedynczej kreski może zawierać się w granicach 1 - 4 modułów, przy czym jedna cyfra musi zawierać dwie jasne i dwie ciemne kreski,
- posiada identyczne znaki Start (na początku) i Stop (na końcu) - tworzą je dwie czarne kreski przedzielone białą kreską o szerokości 1-go modułu każda. Kreski te wydłużone są do dołu o szerokość 5-ciu modułów. Pośrodku występuje znak rozdzielający, także wydłużony do dołu o szerokość 5-ciu modułów. Znak rozdzielający składa się z 5-ciu kresek, każda o szerokości 1-go modułu (naprzemiennie biała, czarna, biała, czarna, biała).
- lewy margines (przed znakiem Start) ma 11 modułów szerokości, prawy margines (za znakiem Stop) ma 7 modułów szerokości.
- Znaki kodowane są w trzech zbiorach A, B i C w/g poniższej tabeli:
Znak |
Zbiór A |
Zbiór B |
Zbiór C |
0 |
|
|
|
1 |
|
|
|
2 |
|
|
|
3 |
|
|
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
|
• kod kreskowy EAN 13
- lewa część w zależności od wartości cyfry przed znakiem Start
kodowana jest w/g poniższego schematu:
Cyfra | Kod |
0 | AAAAAA |
1 | AABABB |
2 | AABBAB |
3 | AABBBA |
4 | ABAABB |
5 | ABBAAB |
6 | ABBBAA |
7 | ABABAB |
8 | ABABBA |
9 | ABBABA |
- prawa część kodu EAN 13 kodowana jest w/g zbioru C
• kod kreskowy EAN 8
- lewa część kodowana jest w/g zbioru A
- prawa część kodowana jest w/g zbioru C
Uwaga:
- w przypadku bardzo małych wymiarów bitmapy kodu kreskowego, przede wszystkim dla minimalnej wysokości kodu EAN 8 i skali odwzorowania = 0, czasami występowały błędy wyświetlania kodu kreskowego.
Z tego powodu przyjąłem dodatkowy warunek,
Const MY_MIN_SIZE_BMP As Long = 10240 'bajtów.
na minimalną wielkość rysowanej bitmapy.
W przypadku zbyt małych rozmiarów dorysowywane są na dole bitmapy dodatkowe linie w kolorze tła, tak by osiągnąć zadany minimalny rozmiar bitmapy.
- ponieważ bitmapa rysowana jest w kontekście ekranu szerokość modułu określana jest w zależności od skali odwzorowania w/g zależności:
lModW= 2^lScale; czyli dla lScale = 0 lModW= 1 piksel;
dla lScale = 1 lModW=2 piksele; itd.
- formalnie znaki kodu numerowane są od strony prawej do lewej.
Ja dla wygody przyjąłem numerację od lewej do prawej.
U mnie znak trzynasty (ósmy w EAN 8) jest znakiem pierwszym (a właściwie zerowym).
- Wydruki kodu z formularza i raportu były prawidłowo odczytywane przez czytnik kodów.
ΔΔΔ | | | | |
|
| | |
|
3.2 Kod kreskowy UPC A i UPC E.
UPC - Uniwersalny Kod Produktów (Universal Product Code).
kod numeryczny odwzorowujący wyłącznie cyfry od 0 do 9, budowa kodu jest modułowa - każdy znak (cyfra) zbudowany jest z 7-miu modułów, a nominalna szerokość modułu wynosi 0,33 mm. Szerokość pojedynczej kreski może zawierać się w granicach 1 - 4 modułów, przy czym jedna cyfra musi zawierać dwie jasne i dwie ciemne kreski, ma dwie wersje:
• Kod kreskowy UPC A - wersja pełna
- koduje 12 znaków w postaci kresek, w tym 10 znaków danych.
- pierwszy znak kodu UPC A określa Nr systemu kodowania:
Tabela nr 1
NoSys | Opis |
0 | normalny kod UPC |
1 | zarezerwowany |
2 | artykuły, gdzie cena zależna jest od wagi: na przykład mięso i przetwory. Kod jest tworzony w sklepie i umieszczany na artykule |
3 | Leki i ogólnie pojęta Służba zdrowia |
4 | bez ograniczeń formatu (nie jest stosowany w sklepach) |
5 | kupon - zawiera kod producenta, rodzinę asortymentową i wartość |
6 | normalny kod UPC |
7 | normalny kod UPC |
8 | zarezerwowany |
9 | zarezerwowany |
przykładowa baza nie ogranicza stosowania zarezerwowanych wartości NoSys kodowania
- obligatoryjnie występuje w nim (na ostatnim miejscu) cyfra kontrolna, którą oblicza się w/g określonego algorytmu,
- posiada identyczne znaki Start ( na początku) i Stop (na końcu) - tworzą je dwie czarne kreski przedzielone białą kreską o szerokości 1-go modułu każda. Kreski te wydłużone są do dołu o szerokość 5-ciu modułów. Pośrodku występuje znak rozdzielający, także wydłużony do dołu o szerokość 5-ciu modułów. Znak rozdzielający składa się z 5-ciu kresek, każda o szerokości 1-go modułu (naprzemiennie biała, czarna, biała, czarna, biała).
- pierwszy i ostatni znak kodu również jest wydłużony do dołu o szerokość 5-ciu modułów,
• Kod kreskowy UPC E - wersja skrócona
- koduje 6 znaków w postaci kresek,
- wszystkie znaki kodu UPC E są jednakowej długości,
- posiada identyczny znak Startu jak UPC A, ale znak Stop jest szerszy i składa się z 6-ciu kresek (naprzemiennie biała, czarna, itd.),
- nie występuje w nim pośrodku znak rozdzielający, ani liczba kontrolna,

Znaki kodowane są w trzech zbiorach A, B i C w/g poniższej tabeli:
Tabela nr 2
Znak |
Zbiór A |
Zbiór B |
Zbiór C |
0 |
|
|
|
1 |
|
|
|
2 |
|
|
|
3 |
|
|
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
|
- kod kreskowy UPC A - lewa część kodowana jest w/g zbioru A.
prawa część kodowana jest w/g zbioru C.
- Kod kreskowy UPC E kodownie możliwe jest dla NoSys = 0 oraz (co nie jest zgodne z Tabelą 1) dla NoSys=1, która określa wartość 1 jako zarezerwowaną. Kodowanie poszczególnych znaków zależne jest od liczby kontrolnej konwertowanego kodu UPC A oraz od Nr systemu kodowania.
Przykładowa bazie dopuszcza także NoSys = 1 jako wartość prawidłową. Kod taki był prawidłowo odczytywany przez czytnik kodów.
Tabela nr 3 A - Zbiór A, B Zbiór B
ChkDig | NoSys=0 | NoSys=1 |
0 | BBBAAA | AAABBB |
1 | BBABAA | AABABB |
2 | BBAABA | AABBAB |
3 | BBAAAB | AABBBA |
4 | BABBAA | ABAABB |
5 | BAABBA | ABBAAB |
6 | BAAABB | ABBBAA |
7 | BABABA | ABABAB |
8 | BABAAB | ABABBA |
9 | BAABAB | ABBABA |
• Zamiana 10 znaków kodu UPC A do 6 znakowego kodu UPC E
- Kod kreskowy UPC A zawiera pięć znaków kodu producenta i pięć znaków kodu produktu.
Jeżeli Kod kreskowy UPC A zawiera ciąg co najmniej czterech zer i spełnia poniższe reguły to możemy przekonwertować kod kreskowy UPC A do kodu UPC E.
- jeżeli kod producenta kończy się 000, 100, lub 200, to kod UPC E składać się będzie z pierwszych dwóch znaków kodu producenta, trzech ostatnich znaków kodu produktu, a na końcu wstawiamy trzeci znak kodu producenta.
Kod produktu musi zawierać się w zakresie 00000 do 00999,
- jeżeli kod producenta kończy się 00, ale nie spełnia warunku 1, to kod UPC E składać się będzie z pierwszy trzech znaków kodu producenta, ostatnich dwóch znaków kodu produktu,' a na końcu wstawiamy cyfrę 3.
Kod produktu musi zawierać się w zakresie 00000 do 00099,
- jeżeli kodu producenta kończy się 0, ale nie spełnia warunku 1 i 2, to kod UPC E składać się będzie z pierwszy czterech znaków kodu producenta, ostatniego znaku kodu produktu, a na końcu wstawiamy cyfrę 4.
Kod produktu musi zawierać się w zakresie 00000 do 00009,
- jeżeli kod producenta nie kończy się 0, to kod UPC E składać się będzie z całego kodu producenta i ostatniej cyfry kodu produktu.
Kod produktu musi zawierać się w zakresie 00005 do 00009,
• Zamiana 6 znakowego kodu UPC E do 10 znaków kodu UPC A
Metoda konwersji zależy od wartości ostatniej cyfry kodu UPC E:
- jeżeli kod UPC-E kończy się na 0, 1, 2 to kod UPC A składać się będzie z pierwszych dwóch znaków kodu UPC E, ciągu czterech zer 0000 i trzech znaków (3 do 5) kodu UPC E,
- jeżeli kod UPC E kończy się na 3 to kod UPC A składać się będzie z trzech pierwszych znaków kodu UPC E, ciągu pięciu zer 00000 i dwóch znaków (od 4 do 5) kodu UPC E,
- jeżeli kod UPC E kończy się na 4 to kod UPC A składać się będzie z czterech pierwszych znaków kodu UPC E, ciągu pięciu zer 00000 i jednego znaku (5-tego) kodu UPC E,
- jeżeli kod UPC E kończy się na 5, 6, 7, 8, 9 to kod UPC A składać się będzie z pięciu pierwszych znaków kodu UPC E, ciągu czterech zer 0000 i dostatniego znaku (6-tego) kodu UPC E
- Niestety, bez znajomości nr systemu (prefiksu) nie jesteśmy w stanie odtworzyć pełnego 12-sto znakowego kodu UPC A. Nr systemu czytnik jest w stanie określić po sposobie kodowania pierwszego znaku.
Jeżeli pierwszy znak jest typu A to NoSys = 0,
jeżeli pierwszy znak jest typu B to NoSys = 1.
Tak więc funkcja konwertująca kod UPC E do UPC A będzie wymagała podania nr systemu (prefiksu). Chyba, że uznamy że dozwolony jest jedynie NoSys=0, wtedy pozostanie nam jedynie obliczenie liczby kontrolnej.
Uwaga:
- w przypadku bardzo małych wymiarów bitmapy kodu kreskowego, przede wszystkim dla minimalnej wysokości kodu UPC E i skali odwzorowania = 0, czasami występowały błędy wyświetlania kodu kreskowego.
Z tego powodu przyjąłem dodatkowy warunek,
Const MY_MIN_SIZE_BMP As Long = 10240 'bajtów.
na minimalną wielkość rysowanej bitmapy.
W przypadku zbyt małych rozmiarów dorysowywane są na dole bitmapy dodatkowe linie w kolorze tła, tak by osiągnąć zadany minimalny rozmiar bitmapy.
- ponieważ bitmapa rysowana jest w kontekście ekranu szerokość modułu określana jest w zależności od skali odwzorowania w/g zależności:
lModW= 2^lScale; czyli dla lScale = 0 lModW= 1 piksel;
dla lScale = 1 lModW=2 piksele; itd.
- formalnie znaki kodu numerowane są od strony prawej do lewej.
Ja dla wygody przyjąłem numerację od lewej do prawej.
U mnie znak dwunasty (szósty w UPC E) jest znakiem pierwszym (a właściwie zerowym).
- Wydruki kodu z formularza i raportu były prawidłowo odczytywane przez czytnik kodów.
ΔΔΔ | | | | |
|
| | |
|
3.3 Kod kreskowy Kodabar.
Kodabar - zracjonalizowany (Codabar).
• kod numeryczny ze znakami specjalnymi,
• odwzorowuje łącznie 20 znaków
- 10 cyfr (od 0 do 9)
- 6 znaków specjalnych (- $ : / . +)
- 4 znaki Start, Stop (ozn. literami A, B, C, D) - znaki Start, Stop można stosować w dowolnej kombinacji (A-A, A-B, ... ,D-D).
Umożliwia to kodowanie 16 różnych pól danych.
Również można zakodować 2 symbole kodu jako jeden, pod warunkiem że znak Stop pierwszego symbolu będzie taki sam jak znak Start drugiego symbolu np. A-C i C-B.
• Kod kreskowy Kodabar - kodowanie:
Cyfra |
Kod |
Znak |
Kod |
0 |
|
- |
|
1 |
|
$ |
|
2 |
|
: |
|
3 |
|
/ |
|
4 |
|
. |
|
5 |
|
+ |
|
6 |
|
A |
|
7 |
|
B |
|
8 |
|
C |
|
9 |
|
D |
|
- kod kreskowy Kodabar jest kodem nieciągłym - każdy znak zaczyna się i kończy czarną kreską,
- odstęp między znakami ma standardowo 1 moduł szerokości, ale może wynosić 2 lub 3,
- współczynnik określający stosunek szerokości kreski szerokiej do szerokości kreski wąskiej powinien zawierać się pomiędzy 2 a 3.
Jeżeli szerokość wąskiej kreski jest mniejsza niż 0,5 mm to współczynnik ten nie może być mniejszy niż 2,25.
- każdy znak zbudowany jest z 7 kresek - 4 kresek czarnych i 3 kresek białych.
- znaki występują w dwóch szerokościach:
• 11 modułów - cyfry od (0 do 9) oraz znaki ( - $ )
zawierają one 2 szerokie kreski (czarną i białą)
• 13 modułów - znaki ( : / + ) zawierające 3 szerokie czarne kreski oraz znaki Start i Stop zawierające 3 szerokie kreski (jedną czarną i dwie białe)
- długość kodu kreskowego Kodabar jest zmienna
Uwaga:
- w przypadku bardzo małych wymiarów bitmapy kodu kreskowego, przede wszystkim dla minimalnej wysokości kodu kreskowego Kodabar, skali odwzorowania = 0 oraz niewielkiej ilości znaków kodu, czasami występowały błędy wyświetlania kodu kreskowego. Z tego powodu przyjąłem dodatkowy warunek, by rysowana bitmapa nie była mniejsza niż:
Const MY_MIN_SIZE_BMP As Long = 10240 'bajtów.
W przypadku zbyt małych rozmiarów dorysowywane są na dole bitmapy dodatkowe linie w kolorze tła, tak by osiągnąć zadany minimalny rozmiar bitmapy.
- ponieważ bitmapa rysowana jest w kontekście ekranu szerokość modułu określana jest w zależności od skali odwzorowania w/g zależności:
lModW= 2^lScale; czyli dla lScale = 0 lModW= 1 piksel;
dla lScale = 1 lModW=2 piksele; itd.
- Wydruki kodu z formularza i raportu były prawidłowo odczytywane przez czytnik kodów jedynie w przypadku gdy zawierał tylko jeden znak Start
(na początku) i jeden znak Stop (na końcu kodu), Jeżeli kod zawierał wewnętrzne znaki Start i Stop kod nie był rozpoznawany przez czytnik.
Prawdopodobnie specjalne kodowanie znaków wewnętrznych wymaga odpowiedniego zaprogramowania czytnika.
ΔΔΔ | | | | |
|
| |