Generátor štítků s čárovým kódem

Podobné dokumenty
Nastavovací příručka pro snímače CCD

Referenční příručka o čárovém kódu

Čárové kódy a jejich sazba Alčer Miroslav

CODEWARE. Nastavovací příručka. pro snímače CipherLab 1500/1560/1562

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Ing. Jan Bartoš, MBA. Jednatel společnosti Smartdata, s.r.o.

Specifikace QR kódu pro účely účtenkové loterie

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

II. Úlohy na vložené cykly a podprogramy

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

MQL4 COURSE. By Coders guru -3 DATA TYPES. Doufám, že předchozí lekce SYNTAX se vám líbila. V té jsme se pokoušeli zodpovědět:

13 Barvy a úpravy rastrového

ČÍSELNÉ SOUSTAVY PŘEVODY

Číselné soustavy a převody mezi nimi

[1] samoopravné kódy: terminologie, princip

CODEWARE. Nastavovací příručka pro snímač CCD 1500

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

GS Popis symbolu GS Potřeba dynamických informací

Tabulkový procesor. Základní rysy

Stacionární 2D čtečka HT-860N Programovací příručka

VYUŽÍTÍ SYSTÉMŮ AUTOMATICKÉ IDENTIFIKACE V KONFEKČNÍ VÝROBĚ

VYUŽÍTÍ SYSTÉMŮ AUTOMATICKÉ IDENTIFIKACE V KONFEKČNÍ VÝROBĚ

Systém GS1. Lineární čárové kódy

Kódováni dat. Kódy používané pro strojové operace

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

Algoritmy I. Číselné soustavy přečíst!!! ALGI 2018/19

Identifikace publikací

Principy počítačů I Reprezentace dat

Když čárový kód nechce prodat výrobek... a zákazník má problém

LEKCE 6. Operátory. V této lekci najdete:

GS1 BarCodes. Identifikace obchodních jednotek

Systém GS1. Lineární čárové kódy

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Kódování Obsah. Unikátní identifikátory. Radim Farana Podklady pro výuku. Unikátní identifikátory. Kontrolní číslice, GUI,

Algoritmizace a programování

Úvod do problematiky ÚPRAVY TABULKY

Algoritmizace prostorových úloh

POKYNY PRO VYPRACOVÁNÍ BAKALÁŘSKÉ A DIPLOMOVÉ PRÁCE

Microsoft Excel kopírování vzorců, adresování, podmíněný formát. Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie

Fz =a z + a z +...+a z +a z =

Systém GS1. Identifikace obchodních jednotek

Postupy práce se šablonami IS MPP

Informatika Datové formáty

AUTOMATIC IDENTIFICATION TECHNOLOGIES BARCODES AND RFID

Telemetrický komunikační protokol JETI

Technická specifikace struktury ABO formátu UHL1 DATOVÝ SOUBOR

Ovládání Open Office.org Calc Ukládání dokumentu : Levým tlačítkem myši kliknete v menu na Soubor a pak na Uložit jako.

Využití čárového kódu v Muzeu Vysočiny Třebíč, p. o. Mgr. Antonín Žamberský, technický pracovník muzea

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 6. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

INTERSTENO 2013Ghent Mistrovstvísvta v profesionálním word processingu

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly

KAPITOLA 3 - ZPRACOVÁNÍ TEXTU

Dokument a jeho části oddíly, záhlaví, zápatí

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Word Lekce III. a IV.

Základní jednotky používané ve výpočetní technice

Pracovní list VY_32_INOVACE_33_19 Databáze Databáze Databáze Ing. Petr Vilímek

Digitalizace dat metodika

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ

Pracovní prostředí Excel 2010

Kódování signálu. Problémy při návrhu linkové úrovně. Úvod do počítačových sítí. Linková úroveň

VYTVÁŘENÍ DATABÁZÍ, VKLÁDÁNÍ ÚDAJŮ

Dotazy tvorba nových polí (vypočítané pole)

Integrovaný informační systém Státní pokladny (IISSP) Dokumentace API - integrační dokumentace

Kódy a kódování dat. Binární (dvojkové) kódy. Kód Aikenův

Komunikační protokol

45 Plánovací kalendář

Práce s textovými proměnnými v DetStudiu

Laserová čtečka čárových kódů OCOM OCBS-LA06

TECHNICKÁ DOKUMENTACE. pro obor Elektrotechnika

Informace, kódování a redundance

KOMBINAČNÍ LOGICKÉ OBVODY

Tisk vysvědčení - krok za krokem

43 HTML šablony. Záložka Šablony v systému

Vyhodnocení 2D rychlostního pole metodou PIV programem Matlab (zpracoval Jan Kolínský, dle programu ing. Jana Novotného)

Požadované dovednosti v ovládání textového procesoru Microsoft Word 2013 pro předměty VA1 a VT1

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

Úvod do programování 7. hodina

Vývojové diagramy 1/7

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

Generování pseudonáhodných. Ing. Michal Dorda, Ph.D.

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Příprava dokumentů textovým procesorem II.

EU-OPVK:VY_32_INOVACE_FIL19 Vojtěch Filip, 2014

Komunikace modulu s procesorem SPI protokol

IB112 Základy matematiky

Modul IRZ návod k použití

Inovace výuky prostřednictvím šablon pro SŠ

Úvod. Program ZK EANPRINT. Základní vlastnosti programu. Co program vyžaduje. Určení programu. Jak program spustit. Uživatelská dokumentace programu

xrays optimalizační nástroj

1.5.1 Číselné soustavy

Normalizace v technické dokumentaci

ÚPRAVA BAKALÁŘSKÉ A DIPLOMOVÉ PRÁCE

GEODETICKÉ VÝPOČTY I.

Číselné soustavy. Binární číselná soustava

Modul EPNO. Téma: Elektronické odesílání evidenčních listů přepravy nebezpečných odpadů

Transkript:

VŠB Technická univerzita Ostrava Fakulta elektroniky a informatiky Katedra 460 Generátor štítků s čárovým kódem Barecode Label Generator 2012 Libor Šebek

Prohlášení studenta Prohlašuji, že jsem tuto bakalářskou práci vypracoval samostatně. Uvedl jsem všechny literární prameny a publikace, ze kterých jsem čerpal. V Ostravě dne 25. dubna 2012 Libor Šebek Poděkování Děkuji vedoucímu bakalářské práce, Ing. Janu Platošovi Ph.D., za vstřícný přístup, ochotu pomoci a čas, který věnoval mé práci. Děkuji za rady a věcné připomínky, bez kterých by tato práce nevznikla. Děkuji také osobám z mého okolí za pomoc při testování aplikace a jejich připomínky.

Abstrakt Práce se zabývá podrobným zpracováním konstrukcí čárových kódů, jejich typů a vlastností. Praktická část práce je založena na vytvoření knihovny generující čárové kódy a následně její využití v aplikaci umožňující generování nejen jednotlivých čárových kódů v podobě obrázků, ale také jejich dávkové generování z XML souboru do PDF. Zmíněno je také porovnání generátorů čárových kódů druhých stran. Abstract The thesis discusses in detail the processing of construction barcode types and their properties. The practical part of thesis is based on generating a library barcode and then the use of its application for generating not only individual bar codes with pictures, but also batch generations from XML file to PDF. Compares barcode generator peers is also mentioned. Klíčová slova C#, čárový kód, 2D kód, 1D kód, EAN13, EAN8, code 39, QR kód, kód 2/5, XML, generátor Keywords C#, barcode, 2D code, 1D code, EAN13, EAN8, code 39, QR code, code 2/5, XML, generator

Obsah 1 Úvod... 7 2 Automatická identifikace čárové kódy... 8 3 Konstrukce čárových kódů... 9 4 Kódy 2/5... 12 4.1 Kód 2/5 industrial... 12 4.2 Kód 2/5 interleaved... 14 5 Kódy skupiny Code x... 17 5.1 Code 39... 17 5.2 Code 39 rozšířený (FULL ASCII)... 19 6 Kódy EAN... 21 6.1 Kód EAN 13... 23 6.2 Kód EAN 8... 24 7 QR code... 26 7.1 Struktura QR code... 26 7.2 Postup kódování... 28 7.3 Kódování dat... 29 7.3.1 Numerický mód... 30 7.3.2 Alfanumerický mód... 30 7.3.3 Byte mód... 32 7.4 Generování korekce chyb... 32 7.5 Příprava pro zápis dat do matice... 33 7.6 Zápis dat do matice... 33 7.7 Maskování... 33 7.7.1 Maskovací matice... 34 7.7.2 Penalizační pravidla... 34 7.8 Verze QR code... 35 7.9 Formátovací informace... 36 8 Aplikace pro generování štítků s čárovými kódy... 38 8.1 XML specifikace... 41 9 Porovnání dostupných generátorů štítků... 44 10 Závěr... 45 11 Použité zdroje... 46 12 Přílohy... 47

12.1 Příloha č. 1 Aplikace na generování čárových kódů... 47

1 Úvod Jak je všeobecně známo, žijeme v uspěchané době. Vše jde kupředu a vše se zrychluje a zkvalitňuje. Naneštěstí brzdou toho všeho se stal člověk a jeho nedokonalosti. Člověk je pomalý a dělá chyby. Příkladem může být evidence produktů na skladě či adresáti na poštovních složenkách. Vše se kdysi dělalo ručně a dělaly se zde samozřejmě chyby. Tyto nedostatky skoro dokonale odstranila bezdotyková evidence v podobě čárových kódů. Kód se jednoduše naskenuje a odpadává tak nutnost čtení a zápisu evidenčního čísla člověkem. V této práci popíši problematiku čárových kódů, jednotlivé typy čárových kódů, kde se tyto čárové kódy využívají, co lze v nich zakódovat a jaké mají konstrukce. Dále se budu věnovat v současné době hodně využívanému 2D kódu s názvem QR code. V závěru se budu věnovat současné nabídce generátorů čárových kódů a jejich porovnání. 7

2 Automatická identifikace čárové kódy Když si představíme malý obchůdek někde na rohu domu, pak všichni víme, že jeho sortiment není nikterak veliký a že databázi cen veškerého sortimentu má prodavačka v hlavě a co nemá v hlavě, tak si jednoduše přečte na cenovce výrobku. Nicméně když převedeme tento případ do větších rozměru, například do dnes velmi oblíbených velkých nákupních řetězců, tak není možné, aby si prodavačky respektive pokladní pamatovaly ceny veškerého sortimentu, nebo aby ceny odečítaly z cenovek. Jednak by bylo velmi nákladné opatřit každý výrobek cenovkou, ale také při kvantu zákazníků, které musí pokladní odbavit, vzrůstá pravděpodobnost odečtení špatné ceny z cenovek. I z těchto důvodů se musel vymyslet způsob jak identifikaci zboží zrychlit a zpřesnit. První pokusy o identifikace zboží se datují kolem roku 1932, kdy v projektu Harvardské univerzity pod vedením Wallace Flinta byly použity k identifikaci zboží děrné štítky. Každý produkt měl svůj děrný štítek, když jej zákazník chtěl koupit, pak si odtrhl děrný štítek, donesl ho skalníkovi, ten ho načet, tím se zboží odepsalo ze skladových zásob a služba produkt vychystala k odebrání a zaplacení. Tato metoda se ale neujala. O 17 let později Bernard Silver a Norman Joseph Woodland vytvořili identifikační prvek na základě Morseovy abecedy a zvukových stop používaných ve filmu podobající se dnes velmi známému čárovému kódu. Nicméně ještě před podáním návrhu na patentový úřad podobu kódu pozměnili, kvůli možnosti čtení kódu ze všech úhlu, do soustředných kružnic nazývaný jako býčí oko. Vývoj čárových identifikačních způsobů šel kupředu až do dnešních dnů, kdy mezi nejznámější a nejvyužívanější čárové kódy patří např. EAN. Jde o čárový kód, který můžeme najít na jakémkoliv obalu výrobku prodávaného v obchodech. V dnešní době je na prvním místě rychlost, přesnost a spolehlivost což čárové kódy bezesporu poskytují. Každý čárový kód lze přizpůsobit podmínkám, ve kterých se bude užívat. Lze jej tisknout v malých rozměrech na prostý papír, ale na druhou stranu jej lze tisknout na plasty, nebo jej zafóliovat, když potřebujeme kód bez problému přečíst i v těžkých provozních podmínkách. 8

3 Konstrukce čárových kódů Čárový kód je, laicky řečeno, sekvence znaků reprezentována (dle kódovací tabulky) čarami a mezerami ohraničená tzv. světlým pásmem, které tvoří hranici mezi kódem a ostatními prvky na etiketách. Ke snímání dat slouží optoelektronická zařízení, která převádějí kódy do podoby srozumitelné počítačům (například logických 0 a 1). Zařízení reagují na změny barvy snímaného prvku. K bezproblémovému přečtení dat z čárového kódu je nutno dodržet kontrast mezi pozadím a barvou reprezentující datové čáry. Rovnice 1 - kontrast pozadí a datové čáry [1] C kontrast mezi pozadím a datovou čarou O pozadí Odraz pozadí O datové čáry Odraz datové čáry Na obrázku 1 je naznačený jeden ze způsobů reprezentace čárového kódu po naskenování optoelektronickým zařízením. Zařízení vysílá světelný paprsek na čárový kód a snímač pak zachytává množství světla odraženého od něj. Odražené světlo je reprezentováno různými napěťovými úrovněmi, které je možno považovat za logickou 1 nebo 0. Obrázek 1 - Převod čárového kódu do elektronické podoby Čárový kód jak již bylo řečeno, je sekvence čar a mezer, ale není čára jako čára. I čárový kód má svá obecná pravidla. V čárovém kódu se mohou vyskytnout také speciální 9

sekvence (znaky). Na začátku a na konci kódu se vyskytuje tzv. počáteční (start) a ukončovací (stop) znak. Jedná se o sekvenci charakterizující jednotlivé typy čárových kódů. Dalším speciálním znakem je dělící znak. Jedná se o prvek v kódu, který kód rozděluje na více částí, přičemž kód zůstane celistvý. Dělící znak můžeme vidět například u EAN13. Před a za čárovým kódem je nutno dodržet tzv. světlé pásmo, ve kterém se nesmí nalézat žádné znaky ani grafické prvky. Všechny tyto prvky jsou znázorněny na obrázku 2. Obrázek 2 - konstrukce čárového kódu X šířka modulu (čáry/mezery) nejužší element v kódu D délka čárového kódu B šířka světlého pásma V výška kódu START počáteční (start) znak STOP koncový (stop) znak KÓD délka kódovaných dat Čárové kódy mají mnoho podob a využití. Lze je rozdělit podle několika kritérií. Zakódovaná data Čárové kódy v sobě uchovávají různý typ dat. A každý čárový kód se specializuje na jiné. Číslice Malá písmena 10

Velká písmena Speciální znaky Kombinace výše zmíněných Hustota uložených dat Také na velikosti čárového kódu záleží a to velikosti ve smyslu šířky nejtenčí identifikační jednotky čárového kódu tzv. modulu což je například nejtenčí čárka nebo mezera. High density (velká hustota) - Velikost modulu je velmi malá a nároky na čtecí zařízení tím stoupá. Medium density (střední hustota) Velikost modulu je optimální. Nárok na čtecí zařízení není nikterak velký. Low density (nízká hustota) Velikost modulu je velká. Využívá se v situacích, kdy je čtení znesnadněno prostředím. Zejména v průmyslu a prašných prostorech. Prvky nesoucí data Jak už z názvu vyplývá, tak u čárových kódů nesou data čáry. Ne vždy ale je tomu tak. Z důvodu úspory místa, nebo zvětšení kapacity kódu při zachování velikosti kódu začaly nést data také mezery mezi čárami. Čáry Čáry a mezery Délka čárového kódu Množství zakódovaných dat se může lišit. I na tuto skutečnost myslí čárové kódy a lze využít čárové kódy s délkou Pevnou variabilní 11

4 Kódy 2/5 Jde o specifickou skupinu čárových kódů, kde je znak z pravidla reprezentován dvěma tlustými elementy a pěti tenkými elementy. Nosičem informace mohou být jak čáry, tak také mezery. Informace o těchto kódech jsou čerpané z knihy Čárové kódy - automatická identifikace [1]. 4.1 Kód 2/5 industrial Kód 2/5 industrial se vyznačuje specifickou reprezentací znaků. Kromě start a stop znaku je každý znak reprezentován 2 tlustými a 3 tenkými čarami. Poměr mezi tlustou a tenkou čárou by měl být v rozmezí 2:1 až 3:1. Mezery mezi čarami nenesou žádnou informaci. Obecně se doporučuje, aby šířka mezery byla rovna šířce modulu, ale není to podmínkou. Znaková sada kódu 2/5 industrial obsahuje start znak, číslice 0-9 a stop znak. Tento kód se řadí do skupiny s proměnnou délkou. Délku výsledného kódu lze spočítat podle vzorce: Rovnice 2 - délka kódu 2/5 industrial D délka celého kódu včetně světlého pásma X šířka modulu M šířka mezery mezi čárami (obvykle M=X) N počet kódovaných znaků P poměr mezi širokou a tenkou čarou (široká/tenká) B světlé pásmo (obvykle 10X) Pokud bude vyžadována kontrola nasnímaných dat, pak se na konec kódu přidá kontrolní číslice (možno dodat kontrolních číslic víc). Do výpočtu celkové délky kódu se pak za N dosadí hodnota N+K kde K bude reprezentovat počet kontrolních číslic. V praxi se ale počítá pouze jedna. Kontrolní číslici lze vypočítat podle vzorce: 12

Rovnice 3 - kontrolní číslice kódu 2/5 industrial Z kontrolní číslice A kódovaný řetězec i lichá čísla j sudá čísla n délka kódovaného řetězce V váhový faktor Například budeme chtít vygenerovat kód 01234 s jednou kontrolní číslicí, modulem X=1mm, poměrem tloušťky čar 3, šířkou mezery X, šířkou světlého pásma 10X a váhovým faktorem 4. Pro kódovaný řetězec 01234 po dosazení do rovnice dostaneme kontrolní číslici 2. Výsledná podoba kódovaného řetězce pak bude 012342. Délka kódu s 6 znaky pak bude 133mm. Výslednou podobu kódu 2/5 industrial pak dostaneme poskládáním sekvencí čar reprezentující znaky, kde na začátku bude znak start, následují data a čárový kódu bude uzavírat znak stop. Reprezentaci jednotlivých znaků naleznete v následující tabulce. 13

Tabulka 1 - Kódovací tabulka kódu 2/5 industrial [1] Znak C1 C2 C3 C4 C5 0 0 0 1 1 0 1 1 0 0 0 1 2 0 1 0 0 1 3 1 1 0 0 0 4 0 0 1 0 1 5 1 0 1 0 0 6 0 1 1 0 0 7 0 0 0 1 1 8 1 0 0 1 0 9 0 1 0 1 0 start 1 1 0 stop 1 0 1 C1-C5 čáry 1-5 1 tlustá čára 0 tenká čára Obrázek 3 - ukázka kódu 2/5 industrial 4.2 Kód 2/5 interleaved Kód 2/5 interleaved (neboli taky překrývaný) je numerický kód s variabilní délkou. Konstrukce znaků je podobná jako u kódu 2/5 (znak je reprezentován 2 tlustými a 3 tenkými elementy), ale u tohoto kódu nejsou nosným elementem jen čáry, ale také mezery. První znak reprezentují čáry a druhý znak jeho mezery. Z tohoto důvodu je nutné, aby celkový počet zakódovaných znaků byl sudý. V případě, že potřebujeme zakódovat lichý počet znaků, pak se dodá buď kontrolní znak na konec kódu, nebo počáteční nula před kód. Kontrolní znak se počítá obdobně jako u kódu 2/5 industrial. Poměr mezi tlustou a tenkou 14

čárou v praxi bývá 3:1, ale obecně lze použít poměr od 2:1 až 3:1. Pokud ale je použit modul X<0,5 mm je nutno použít poměr větší než 2,25:1. Vzhledem k tomu, že znaky se překrývají a nosným elementem jsou čáry i mezery, dosahuje tento kód vysoké informační hustoty. Délku výsledného kódu 2/5 interleaved spočítáme následovně: Rovnice 4 - Délka kódu 2/5 interleaved D délka celého kódu včetně světlého pásma X šířka modulu N počet kódovaných znaků P poměr mezi širokou a tenkou čarou (široká/tenká) B světlé pásmo (obvykle 10X) Tabulka 2 - Kódovací tabulka kódu 2/5 interleaved [1] Znak E1 E2 E3 E4 E5 0 0 0 1 1 0 1 1 0 0 0 1 2 0 1 0 0 1 3 1 1 0 0 0 4 0 0 1 0 1 5 1 0 1 0 0 6 0 1 1 0 0 7 0 0 0 1 1 8 1 0 0 1 0 9 0 1 0 1 0 C1 M1 C2 Start 0 0 0 Stop 1 0 0 E1-E5 čáry/mezery 1-5 C1, C2 čáry M1 Mezera 0 tenká čára/mezera 1 tlustá čára/mezera 15

Speciální modifikace kódu 2/5 interleaved známé jako ITF (Interleaved Two of Five) jsou často používané v obchodech k získávání údajů o distribučních jednotkách, a jsou implementovány do systémů EAN. Distribuční jednotkou se rozumí karton, bedna, nebo paleta přepravována jako celek. Pro údaje obsahující ITF pak platí speciální pravidla, které je nutno dodržovat. Na základě těchto pravidel vznikly podmnožiny kódu 2/5 interleaved a to ITF-6, ITF-14 a ITF-16. Jedná se o numerické kódy s pevnou šířkou. Poměr mezi tlustým a tenkým elementem je pevný 2,25:1 a základní šířka modulu je 1,016mm (podle součinitele velikosti se může šířka modulu změnit). Čárové kódy lze od prostého ITF rozlišit díky speciálnímu orámování. Kódy ITF-x jsou obklopeny tzv. nosnou čárou, která má šířku 4,8mm. V některých případech není možné toto orámování dodržet, a proto lze využít varianty druhé, kdy nosná čára o minimální šířce dvou modulů lemuje čárový kód pouze z podélných stran. 16

5 Kódy skupiny Code x Code x reprezentuje skupinu čárových kódů schopných zakódovat alfanumerické znaky (číslice 0-9 a znaky velké abecedy) a znaky speciální. Vlajkové lodě této skupiny jsou Code 39, Code 93 a Code 128. Informace o těchto kódech jsou čerpané z knihy Čárové kódy - automatická identifikace [1]. 5.1 Code 39 Code 39 je označení čárového kódu proměnné délky. V Code 39 lze zakódovat znaky numerické (0-9), znaky velké abecedy (A-Z), mezera a znaky speciální ( *, -,., $, /, +, % ). Čárový kód uvozuje START znak a ukončuje STOP znak. START a STOP znak reprezentuje znak *. Mezi tyto bitové sekvence se vkládá požadovaný řetězec, který má být zakódován. Každý znak je reprezentován pěti čarami a čtyřmi mezerami, z nichž jsou 3 elementy široké a 6 úzkých a každý element (čára i mezera) je nosičem informace. Standardní poměr mezi úzkým a širokým elementem je 3:1 avšak lze používat poměr od 2:1 až do 3:1. V případě, že modul je užší než 0,5 mm pak minimální poměr mezi úzkým a širokým elementem je 2,25:1. Jednotlivé bitové sekvence znaků v čárovém kódu jsou odděleny mezerou o šířce 1 modulu. Pro úspěšné rozpoznání čárového kódu od okolí se využívá bílého pásma před a za kódem s minimální šířkou 10 modulů. Pro ochranu integrity dat v čárovém kódu, je možné na konec kódovaného řetězce přidat kontrolní znak. Čárový kód se tedy o tento znak prodlouží. Tento kontrolní znak vypočteme jako součet číselných ekvivalentů jednotlivých znaků a na výsledku provedeme operaci modulo 43 (zbytek po celočíselném dělení). Kontrolní znak pak je znak mající stejný číselný ekvivalent. Rovnice 5 - Výpočet délky kódu Code 39 D délka celého kódu včetně světlého pásma X šířka modulu N počet kódovaných znaků P poměr mezi širokou a tenkou čarou (široká/tenká) B světlé pásmo (obvykle 10X) 17

Příklad: Chceme vypočítat délku čárového kódu s kontrolním znakem. Kódovaný řetězec bude CS.VSB.CZ, šířka modulu bude 1mm, šířka bílého pásma bude 10 modulů a poměr širokého a úzkého elementu bude 3:1. Zjistíme si číselné ekvivalenty k jednotlivým znakům kódovaného řetězce z kódovací tabulky ( C =12, S =28,. =37, V =31, S =28, B =11,. =37, C =12, Z =35) a sečteme je (suma číselných ekvivalentů je 231). Dále provedeme modulo 43. Získáme tedy číslo 16, kterému odpovídá znak G. Výsledný řetězec tedy bude CS.VSB.CZG a šířka kódu (po dosazení do výše uvedeného vzorce) bude 211mm. Tabulka 3 - Kódovací tabulka kódu Code 39 [1] CE ZNAK C1 M1 C2 M2 C3 M3 C4 M4 C5 0 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 1 0 0 0 0 1 2 2 0 0 1 1 0 0 0 0 1 3 3 1 0 1 1 0 0 0 0 0 4 4 0 0 0 1 1 0 0 0 1 5 5 1 0 0 1 1 0 0 0 0 6 6 0 0 1 1 1 0 0 0 0 7 7 0 0 0 1 0 0 1 0 1 8 8 1 0 0 1 0 0 1 0 0 9 9 0 0 1 1 0 0 1 0 0 10 A 1 0 0 0 0 1 0 0 1 11 B 0 0 1 0 0 1 0 0 1 12 C 1 0 1 0 0 1 0 0 0 13 D 0 0 0 0 1 1 0 0 1 14 E 1 0 0 0 1 1 0 0 0 15 F 0 0 1 0 1 1 0 0 0 16 G 0 0 0 0 0 1 1 0 1 17 H 1 0 0 0 0 1 1 0 0 18 I 0 0 1 0 0 1 1 0 0 19 J 0 0 0 0 1 1 1 0 0 20 K 1 0 0 0 0 0 0 1 1 21 L 0 0 1 0 0 0 0 1 1 22 M 1 0 1 0 0 0 0 1 0 23 N 0 0 0 0 1 0 0 1 1 24 O 1 0 0 0 1 0 0 1 0 25 P 0 0 1 0 1 0 0 1 0 18

26 Q 0 0 0 0 0 0 1 1 1 27 R 1 0 0 0 0 0 1 1 0 28 S 0 0 1 0 0 0 1 1 0 29 T 0 0 0 0 1 0 1 1 0 30 U 1 1 0 0 0 0 0 0 1 31 V 0 1 1 0 0 0 0 0 1 32 W 1 1 1 0 0 0 0 0 0 33 X 0 1 0 0 1 0 0 0 1 34 Y 1 1 0 0 1 0 0 0 0 35 Z 0 1 1 0 1 0 0 0 0 36-0 1 0 0 0 0 1 0 1 37. 1 1 0 0 0 0 1 0 0 38 mezera 0 1 1 0 0 0 1 0 0 39 * 0 1 0 0 1 0 1 0 0 40 $ 0 1 0 1 0 1 0 0 0 41 / 0 1 0 1 0 0 0 1 0 42 + 0 1 0 0 0 1 0 1 0 43 % 0 0 0 1 0 1 0 1 0 CE číselný ekvivalent ZNAK kódovaný znak C1-C5 čára 1-5 M1-M4 mezera 1-4 5.2 Code 39 rozšířený (FULL ASCII) Code 39 FULL ASCII není žádný nový typ čárového kódu, ale jde o speciální případ čárového kódu Code 39, v kterém lze zakódovat celá ASCII tabulka. Znaky, které nejsou v kódové tabulce Code 39, ale jsou v ASCII tabulce, se nahrazují kombinací znaku speciálního ($, %, /, +) a znaku alfanumerického [1]. Je tedy patrné, že délka kódu se prodlouží. Například budeme chtít zakódovat řetězec VSB.cz. V řetězci se nachází 2 znaky, které nejsou v kódovací tabulce Code 39, proto řetězec VSB.cz převedeme na řetězec VSB.+C+Z. Tento řetězec pak lze bez problémů zakódovat pomocí standardního Code 39. 19

Tabulka 4 - Převod Code 39 FULL ASCII na Code 39 [1] Code 39 ASCII Code 39 ASCII Code 39 ASCII Code 39 ASCII Code 39 ASCII NUL %U SUB $Z 4 4 N N h +H SOH $A ESC %A 5 5 O O i +I STX $B FS %B 6 6 P P j +J ETX $C GS %C 7 7 Q Q k +K EOT $D RS %D 8 8 R R l +L ENQ $E US %E 9 9 S S m +M ACK $F mezera mezera : / T T n +N BEL $G! /A ; %F U U o +O BS $H " /B < %G V V p +P HT $I # /C = %H W W q +Q LF $J $ /D > %I X X r +R VT $K % /E? %J Y Y s +S FF $L & /F @ %V Z Z t +T RC $M /G A A [ %K u +U SOH $N ( /H B B \ %L v +V SI $O ) /I C C ] %M w +W DLE $P * /J D D ^ %N x +X DC1 $Q + /K E E _ %O y +Y DC2 $R. /L F F %W z +Z DC3 $S - /M G G a +A { %P DC4 $T. /N H H b +B %Q NAK $U / /O I I c +C } %R SYN $V 0 0 J J d +D ~ %S ETB $W 1 1 K K e +E %T CAN $X 2 2 L L f +F DEL %X %Y EM $Y 3 3 M M g +G %Z ASCII znak ASCII tabulky Code 39 zástupná sekvence znaků Code39 za znak z ASCII tabulky 20

6 Kódy EAN EAN (European Article Numbering) je kód využívaný k označování zboží pro obchodní účely. Tenko kód vznikl v roce 1977. V současné době řízení a využívání kódů EAN má na starosti mezinárodní nevládní organizace IANA EAN (International Article Numbering Association EAN). Informace o těchto kódech jsou čerpané z knihy Čárové kódy - automatická identifikace [1]. EAN je kód s pevnou šířkou. Lze do něj zakódovat jen numerické znaky. Skládá se ze start a stop znaku, dělicího znaku a samotných dat. Pro EAN jsou definovány 3 kódovací tabulky (A pro lichou paritu, B a C pro sudou paritu). Využití kódovacích tabulek záleží na typu kódu EAN. Tabulka 5 - Kódovací tabulka EAN - A lichá parita [1] ZNAK E1 E2 E3 E4 E5 E6 E7 0 0 0 0 1 1 0 1 1 0 0 1 1 0 0 1 2 0 0 1 0 0 1 1 3 0 1 1 1 1 0 1 4 0 1 0 0 0 1 1 5 0 1 1 0 0 0 1 6 0 1 0 1 1 1 1 7 0 1 1 1 0 1 1 8 0 1 1 0 1 1 1 9 0 0 0 1 0 1 1 ZNAK kódovaný znak E1-7 Element 1-7 1 čára 0 mezera 21

Tabulka 6 - Kódovací tabulka EAN - B sudá parita [1] ZNAK E1 E2 E3 E4 E5 E6 E7 0 0 1 0 0 1 1 1 1 0 1 1 0 0 1 1 2 0 0 1 1 0 1 1 3 0 1 0 0 0 0 1 4 0 0 1 1 1 0 1 5 0 1 1 1 0 0 1 6 0 0 0 0 1 0 1 7 0 0 1 0 0 0 1 8 0 0 0 1 0 0 1 9 0 0 1 0 1 1 1 ZNAK kódovaný znak E1-7 Element 1-7 1 čára 0 mezera Tabulka 7 - kódovací tabulka EAN - C sudá parita [1] ZNAK E1 E2 E3 E4 E5 E6 E7 0 1 1 1 0 0 1 0 1 1 1 0 0 1 1 0 2 1 1 0 1 1 0 0 3 1 0 0 0 0 1 0 4 1 0 1 1 1 0 0 5 1 0 0 1 1 1 0 6 1 0 1 0 0 0 0 7 1 0 0 0 1 0 0 8 1 0 0 1 0 0 0 9 1 1 1 0 1 0 0 ZNAK kódovaný znak E1-7 Element 1-7 1 čára 0 mezera 22

6.1 Kód EAN 13 Kód EAN 13 je nejvyužívanějším kódem ze skupiny EAN. Lze jej jednoduše rozpoznat díky jeho pevné délce v podobě 13 znaků a charakteristickými přesahy start, stop a dělícího znaku. Kód EAN 13 se skládá ze start znaku, stop znaku, dělícího znaku uprostřed kódu (dělí kód na 2 šestičíslí) protáhnutých o šířku pěti modulů pod hranici ostatních znaků a jednotlivými znaky kde znak na pozici 1 je kontrolním znakem. U EAN 13 se kódují pouze čísla na pozicích 1-12 (číslováno zprava). Textová podoba kódovaných znaků se umisťuje pod jim pařící sekvenci čar a mezer v kódu. Třináctý znak pak umístíme do roviny s ostatními znaky ale posunutý o 5 modulů vlevo od hranice start znaku. Celý kód obklopuje světlé pásmo s následujícími šířkami: Vlevo od kódu sedminásobek šířky modulu Vpravo od kódu jedenáctinásobek šířky modulu Nad kódem šířka jednoho modulu Mezi řádkem číslic a kódem šířka jednoho modulu Ke kódování se využívají všechny 3 kódovací tabulky definované pro EAN. Pro znaky 1-6 se vždy využívá kódovací tabulka C sudé parity. Znaky 7-12 se kódují proměnlivě dle tabulky A liché party a B sudé parity v závislosti na znaku na pozici 13. Tabulka 8 - Proměnlivost parity znaků 12 7 [1] P13 P12 P11 P10 P9 P8 P7 0 A A A A A A 1 A A B A B B 2 A A B B A B 3 A A B B B A 4 A B A A B B 5 A B B A A B 6 A B B B A A 7 A B A B A B 8 A B A B B A 9 A B B A B A A tabulka A liché parity B tabulka B sudé parity P13-7 pozice 13-7 23

Kontrolní znak na pozici číslo 1 vypočítáme následovně: Sečteme hodnoty znaků na sudých pozicích počínaje pozice číslo 2 a vynásobíme číslicí 3. Dále sečteme hodnoty znaků na lichých pozicích počínaje pozice číslo 3. Tyto hodnoty sečteme a odečteme od nejbližšího vyššího násobku 10. Rovnice 6 Z kontrolní číslice A znak j sudá čísla i lichá čísla Obrázek 4 - ukázka čárového kódu EAN 13 6.2 Kód EAN 8 Kód EAN 8 je menší variantou kódu EAN 13 využívanou zejména tam, kde se rozměrově EAN 13 nevleze. Například na tabákové výrobky, tužky, pera atd. EAN 8 Obsahuje pouze 8 čísel, z nichž jedno je kontrolní číslice. Kontrolní číslice se počítá obdobně jako u EAN 13. Čárový kód EAN 8 se skládá ze start znaku, stop znaku, dělícího znaku uprostřed kódu (dělí kód na 2 šestičíslí) a numerických znaků. Znaky na pozicích 1-4 se kódují podle tabulky C sudé parity a znaky na pozicích 5-8 podle tabulky A liché parity. Start, stop a dělící znak jsou protáhnuty o 5 modulů pod hranici ostatních znaků. Součástí kódu je také textová reprezentace kódu, kde každý znak je umístěn pod jemu odpovídající sekvenci čar a mezer. Text a sekvence čar a mezer je oddělena mezerou o šířce jednoho modulu. Celý kód je obklopen světlým pásmem s následujícími parametry: 24

Vlevo a vpravo od kódu sedminásobek šířky modulu Nad kódem šířka jednoho modulu Mezi řádkem číslic a kódem šířka jednoho modulu Obrázek 5 - ukázka čárového kódu EAN 8 25

7 QR code QR code je typ maticového kódu, který se liší od čárového kódu tím, že data nenesou čáry uspořádané za sebou, ale data nesou malé čtverečky uspořádané do matice. Tato matice obsahuje několik speciálních elementů v podobě zarovnávacích značek, pozičních značek a časových značek. Velikost a objem zakódovaných dat QR code závisí na vybrané verzi (od 1 do 40) a stupni korekce chyb. Do QR kódu lze zakódovat dle vybraného módu numerické znaky, alfanumerické znaky s několika speciálními znaky, znaky ASCII tabulky, nebo taky znaky tradiční japonštiny. Díky možnosti zakódování znaky tradiční japonštiny je QR code hojně využíván v asijských zemích. 7.1 Struktura QR code QR code se skládá z matice malých čtverečků nazývaných moduly. Tmavý modul reprezentuje log 1 a světlý modul reprezentuje log 0. Každý modul lze identifikovat souřadnicemi [x, y] (x reprezentuje řádek, y reprezentuje sloupec). Struktura QR code obsahuje poziční symboly, časovací symboly a zarovnávací symboly. Dále obsahuje prostor pro zapsání verze a formátu kódu. Data jsou zapsaná do zbylého prostoru po rezervovaných symbolech. Celý kód pak obklopuje světlé pásmo důležité pro rozpoznání kódu od okolních elementů, kde je kód umístěn. Poziční symboly jsou umístěny v pravém a levém horním rohu a levém dolním rohu. Poziční symbol má podobu 4 do sebe zanořených čtverců o velikosti 9, 7, 5 a 3 moduly přičemž první čtverec reprezentují log 0, druhý log 1 třetí log 0 a čtvrtý log 1. Časovací symboly jsou sekvence log 1 a 0 jdoucích za sebou zapsaných mezi poziční symboly do řádku 7 a sloupce 7 mezi zarovnávací symboly. Zarovnávací symboly jsou 3 čtverce zanořené do sebe o velikosti 5, 3 a 1 modul, přičemž první čtverec reprezentují log 1, druhý log 0 a třetí log 0. Umístění a počet těchto symbolů závisí na verzi QR code. Umístění a počet naleznete v následující tabulce. 26

Tabulka 9 - Počet a pozice zarovnávacích symbolů [3] Verze počet řádek/sloupec umístění 1 0-2 1 6 18 3 1 6 22 4 1 6 26 5 1 6 30 6 1 6 34 7 6 6 22 38 8 6 6 24 42 9 6 6 26 46 10 6 6 28 50 11 6 6 30 54 12 6 6 32 58 13 6 6 34 62 14 13 6 26 46 66 15 13 6 26 48 70 16 13 6 26 50 74 17 13 6 30 54 78 18 13 6 30 56 82 19 13 6 30 58 86 20 13 6 34 62 90 21 22 6 28 50 72 94 22 22 6 26 50 74 98 23 22 6 30 54 78 102 24 22 6 28 54 80 106 25 22 6 32 58 84 110 26 22 6 30 58 86 114 27 22 6 34 62 90 118 28 33 6 26 50 74 98 122 29 33 6 30 54 78 102 126 30 33 6 26 52 78 104 130 31 33 6 30 56 82 108 134 32 33 6 34 60 86 112 138 33 33 6 30 58 86 114 142 34 33 6 34 62 90 118 146 35 46 6 30 54 78 102 126 150 36 46 6 24 50 76 102 128 154 37 46 6 28 54 80 106 132 158 38 46 6 32 58 84 110 136 162 39 46 6 26 54 82 110 138 166 40 46 6 30 58 86 114 142 170 27

Verze kódu je umístěna na 2 místech a to vpravo nahoře vedle pozičního symbolu a dole a vlevo dole nad pozičním symbolem. Formát kódu nalezneme kolem pozičního symbolu nahoře vlevo, pod pozičním symbolem vpravo nahoře a vedle pozičního symbolu dole vlevo. Obrázek 6 - ukázka struktury QR code 7.2 Postup kódování Datová analýza Je potřeba zhodnotit vstupní data a podle nich vybrat mód, v kterém data budou zakódovaná. Dále je potřeba zvolit stupeň korekce chyb a verzi kódu. Kódování Převedení vstupních dat do bitové sekvence dle zvoleného módu. Pokud je potřeba tak bitovou sekvenci doplnit o doplňující bitové sekvence na požadovanou délku bitové sekvence. Generování korekce chyb Rozdělení bitové sekvence do bloků a pro každý blok a podle zvoleného stupně korekce chyb vygenerovat sekvenci bitů korekce chyb. 28

Sestavení výsledné bitové sekvence Proložení datových bloků a bloků korekce chyb, a pokud je to nezbytné, tak doplnit je o zbytkové bity do požadované délky. Vytvoření matice Sestavení matice se zarovnávacími, časovými a pozičními symboly a vložení bitové sekvence dat a korekce chyb. Maskování Aplikování maskovacích vzorů na vytvořenou matici, vyhodnocení penalizačních bodů a vybrání nejoptimálnější. Zápis informací o verzi a formátu Nakonec se do předem určených oblastí matice vepíší informace o formátu, a pokud se jedná o verzi QR code 7 a vyšší, tak také informace o verzi. 7.3 Kódování dat Než se data mohou zapsat do matice QR code je nutné vybrat způsob kódování a podle toho data zakódovat. Zakódovaná data se uzavřou do bloku obsahující hlavičku, tělo a uzavřen je čtyřmi nulami. Hlavička obsahuje identifikátor módu kódování a počet zakódovaných znaků. Tělo obsahuje zakódované znaky. Informace v hlavičce o počtu zakódovaných znaků má pevnou délku nicméně je závislá na verzi QR code a módu kódování. Počet bitů pro zapsání počtu zakódovaných znaků naznačuje následující tabulka. Po převedení vstupního řetězce se data zakončí terminátorem 0000 a doplní do požadované délky vyplňovacími sekvencemi 11101100 a 00010001. Tyto sekvence se střídají až do vyplnění celého datového prostoru. Ten se pak rozdělí do bloků. Velikosti a počty bloků lze najít ve standardu ISO/IEC 18004/2000 v tabulce č. 13 [3]. Tabulka 10 - počty bitů pro označení počtu zakódovaných znaků [3] verze Numerický mod Alfanumerický mód Byte mód 1-9 10 9 8 10-26 12 11 16 27-40 14 13 16 29

Tabulka 11 - identifikátory módu kódování [3] mód identifikátor numerický 0001 alfanumerický 0010 byte 0100 7.3.1 Numerický mód Jedná se o mód s nejvyšší hustotou zakódovaných dat. Nicméně v tomto módu lze zakódovat pouze číslice. Vstupní data se rozdělí do trojic a ty se převedou do 10 bitové binární hodnoty. V případě, že délka vstupních dat není násobkem 3, pak zbylé dvě či jedna číslice jsou převedeny do 7 respektive 4 bitové binární podoby. Získané binární data se spojí a na začátek se vloží hlavička obsahující označení typu módu a počet znaků. Příklad: Chceme zakódovat text 01234567 ve verzi 1. 1. Rozdělíme text na trojice 012 345 67 2. Každou trojici převedeme na 10 bitovou binární hodnotu 012 0000001100 345 0101011001 67 1000011 3. Spojíme binární hodnoty 0000001100 0101011001 1000011 4. Počet znaků je 8. Ve verzi 1 tedy do hlavičky vložíme binární hodnotu 0000001000 5. Před data vložíme identifikátor módu 0001 a počet znaků 0001 0000001000 0000001100 0101011001 1000011 7.3.2 Alfanumerický mód V alfanumerickém módu lze zakódovat znaky velké abecedy, numerické znaky a znaky speciální. Každý znak má svůj numerický ekvivalent dne následující tabulky. 30

Tabulka 12 - kódovací tabulka QR code - Alfanumerický mód [3] znak hodnota znak hodnota znak hodnota znak hodnota 0 0 C 12 O 24 SP 36 1 1 D 13 P 25 $ 37 2 2 E 14 Q 26 % 38 3 3 F 15 R 27 * 39 4 4 G 16 S 28 + 40 5 5 H 17 T 29-41 6 6 I 18 U 30. 42 7 7 J 19 V 31 / 43 8 8 K 20 W 32 : 44 9 9 L 21 X 33 A 10 M 22 Y 34 B 11 N 23 Z 35 Znaky vstupních dat se převedou na jejich ekvivalenty dle tabulky výše. Dále se rozdělí na dvojice. První číslo z dvojice se vynásobí číslem 45 a přičte se druhé číslo. Výsledek se převede do 11 bitové binární hodnoty. V případě že je lichý počet znaků pak se poslední znak převede do 6 bitové binární hodnoty. Na závěr se hodnoty spojí a před ně vloží hlavička obsahující identifikátor módu a počet zakódovaných znaků v bitové délce dle tabulky č. 10. Příklad: Chceme zakódovat text VSB.CZ ve verzi 1. 1. Znaky převedeme na ekvivalentní hodnoty V 31, S 28, B 11,. 42, C 12, Z 35 2. Rozdělíme na dvojice (31, 28), (11, 42), (12, 35) 3. Každou dvojici převedeme na 11 bitovou hodnotu (31, 28) 31 * 45 + 28 = 1423 -> 10110001111 (11, 42) 11 * 45 + 42 = 537 -> 01000011001 (12, 35) 12 * 45 + 35 = 575 -> 01000111111 4. Spojíme binární hodnoty 10110001111 01000011001 01000111111 5. Počet znaků je 6. Ve verzi 1 tedy do hlavičky vložíme binární hodnotu 000000110 6. Před data vložíme identifikátor módu 0001 a počet znaků 0010 000000110 10110001111 01000011001 01000111111 31

7.3.3 Byte mód V byte módu je každý znak kódovaný pomocí znakové sady Shift JIS do 8 bitových hodnot. Ty jsou spojeny a před ně vložena hlavička obsahující identifikátor módu a počet znaků převedený do 8 nebo 18 bitové hodnoty dle tabulky č. 10. 7.4 Generování korekce chyb QR code kromě dat obsahuje také část pro rekonstrukci dat. Dle zvoleného typu korekce chyb lze rekonstruovat od 7 % do 30 % poničených dat viz tabulka níže. Korekce chyb se počítá pro každý datový blok zvlášť. Tabulka 13 - identifikátory korekce chyb a rekonstrukční kapacita [3] rekonstrukční kapacita identifikátor korekce chyb [%] L 7 M 15 Q 25 H 30 QR code využívá Reed-Solomon korekci chyb[4]. V prvním kroku generování korekce chyb je nutné zjistit délku korekce chyb, která závisí na zvoleném stupni korekce chyb a nalezneme ji ve standardu ISO/IEC 18004:2000 v tabulce č 22 [3]. Délce korekce chyb odpovídá polynom pro generování korekce chyb, který lze najít ve standardu ISO/IEC 18004:2000 v tabulce A.3 [3]. V druhém kroku potřebujeme vytvořit polynom z datového bloku, pro který generujeme korekci chyb. Ten vytvoříme tak, že blok rozdělíme do 8 bitových hodnot a tyto hodnoty převedeme do dekadického tvaru, přičemž každá hodnota bude člen polynomu se stupněm odpovídající pořadí hodnotě číslované zprava. Příklad: máme blok 11110000 00001111 00011000 11100111 ten rozdělíme na osmice a převedeme do dekadického tvaru. Vzniknou nám tedy 4 čísla 240, 15, 24, 231. Z těchto hodnot uděláme polynom 240x 3 + 15x 2 + 24 x + 231. Když už známe polynom pro generování korekce chyb a polynom bloku dat, pak tyto hodnoty vydělíme a získáme korekci chyb pro požadovaný blok. 32

7.5 Příprava pro zápis dat do matice Když již máme vygenerované bloky dat a bloky korekce chyb je potřeba je uspořádat a to tak, že byty jednotlivých bloků prokládáme. Obrázek 7 - prokládání dat [3] D1-46 byty datových bloků 1-4 E1-88 byty bloků korekce chyb E1-88 Finální data pak budou vypadat následovně: D1, D12, D23, D35, D2, D13, D33, D45, D34, D46, E1, E23, E45, E67, E2, E24, E22, E44, E66, E88. 7.6 Zápis dat do matice Finální data se do matice zapisují v blocích 2x4. První blok se zapisuje od pravého dolního rohu a postupuje se ve sloupcích o šířce 2 moduly směrem nahoru. Jakmile se dosáhne konce sloupce, pak se zapisují data do vedlejšího sloupce opačně, tedy shora dolů. Pokud blok narazí na moduly jakýchkoliv speciálních symbolů (poziční, zarovnávací, časovací), pak tyto moduly přeskočí a pokračuje v nejbližším možném volném modulu. Obrázek 8 - uspořádání bitů při zápisu do matice [3] 7.7 Maskování Pro lepší čitelnost QR code a odstranění velkých oblastí stojné barvy se používá maskování. Je to postup kdy se přes sebe přeloží maskovací matice a matice QR code a 33

provede se nad stejnými souřadnicemi logická operace XOR. Speciální symboly v podobě zarovnávacího, časovacího a pozičního symbolu, verze a formátování se vynechávají. Toto se provede se všemi maskovacími maticemi a na závěr se vyhodnotí penalizační body dle 4 pravidel, které zkoumají oblasti špatně čitelné pro snímače. Maskovaný QR code s nejnižším počtem penalizačních bodů je pak kód vhodný k publikaci. 7.7.1 Maskovací matice Maskovací matice jsou matice o stejné velikosti jako je matice QR code. Logické 0 a 1 jsou definované dle podmínek v níže uvedené tabulce. Pokud podmínce vyhovuje, pak se na souřadnice [i, j] zapíše log 1. V opačném případě log 0. Tabulka 14 - maskovací matice QR code id podmínka 1 (i + j) mod 2 == 0 2 i mod 2 == 0 3 j mod 3 = 0 4 (i + j) mod 3 == 0 5 ((i / 2) + (j / 3)) mod 2 == 0 6 (I * j) mod 2 + (i * j) mod 3 == 0 7 ((i * j) mod 2 + (i * j) mod 3) mod 2 == 0 8 ((i * j) mod 3 + (i + j) mod 2) mod 2 == 0 7.7.2 Penalizační pravidla body. Penalizační pravidla je soubor 4 pravidel, dle kterých se QR code udělují penalizační Pravidlo 1 Za každou posloupnost 5 stejných logických hodnot se udělují 3 penalizační body. Za každou následující stejnou hodnotu se penalizační body inkrementují o 1. Pravidlo 2 Za každý čtverec 2x2 moduly se stejnou logickou hodnotou se udělují 3 penalizační body. Pravidlo 3 Za každou posloupnost modulů 10111010000, 00001011101, nebo 000010111010000 v řádku i ve sloupci se uděluje 40 penalizačních bodů. 34

Pravidlo 4 Pravidlo je založeno na poměru log 1 a log 0 v matici. Počet penalizačních bodů za pravidlo 4 se vypočítá dle následujícího vzorce. Rovnice 7 - výpočet penalizačních bodů dle pravidla 4 P penalizační body D počet modulů s hodnotou log 1 M počet všech modulů 7.8 Verze QR code V QR code je definováno 40 možných verzí, které se liší v počtu modulů a v množství dat, které je možno do kódu zakódovat. Verze 1 obsahuje 21x21 modulů, verze 2 obsahuje 25x25 modulů a každá další verze je zvětšena o 4 moduly. Nejvyšší verze 40 pak obsahuje 177 x 177 modulů. Informace o verzi QR code nalezneme na dvou místech. V bloku 3x6 modulů vpravo nahoře vedle pozičního symbolu a nad časovacími symboly. V bloku 6x3 moduly vlevo dole nad pozičním symbolem a vedle časovacích značek. Nicméně tuto informaci nalezneme v QR code až od verze 7. Informace o verzi obsahuje 18 bitů a zarovnává se následovně: Obrázek 9 - zarovnání bitů verze kódu 35

Tabulka 15 - bitová reprezentace verze QR code verze bitová reprezentace verze bitová reprezentace 7 00 0111 1100 1001 0100 24 01 1000 1110 1100 0100 8 00 1000 0101 1011 1100 25 01 1001 0001 1110 0001 9 00 1001 1010 1001 1001 26 01 1010 1111 1010 1011 10 00 1010 0100 1101 0011 27 01 1011 0000 1000 1110 11 00 1011 1011 1111 0110 28 01 1100 1100 0001 1010 12 00 1100 0111 0110 0010 29 01 1101 0011 0011 1111 13 00 1101 1000 0100 0111 30 01 1110 1101 0111 0101 14 00 1110 0110 0000 1101 31 01 1111 0010 0101 0000 15 00 1111 1001 0010 1000 32 10 0000 1001 1101 0101 16 01 0000 1011 0111 1000 33 10 0001 0110 1111 0000 17 01 0001 0100 0101 1101 34 10 0010 1000 1011 1010 18 01 0010 1010 0001 0111 35 10 0011 0111 1001 1111 19 01 0011 0101 0011 0010 36 10 0100 1011 0000 1011 20 01 0100 1001 1010 0110 37 10 0101 0100 0010 1110 21 01 0101 0110 1000 0011 38 10 0110 1010 0110 0100 22 01 0110 1000 1100 1001 39 10 0111 0101 0100 0001 23 01 0111 0111 1110 1100 40 10 1000 1100 0110 1001 7.9 Formátovací informace Formátovací informace obsahují informace o použitém maskovací matici a stupni korekce chyb. Tato informace se vkládá dle obrázku níže. Obrázek 10 - umístění formátovacích informací [3] 36

Tabulka 16 - formátovací informace stupeň korekce chyb maskovací matice Formátovací informace stupeň korekce chyb maskovací matice Formátovací informace L 0 111011111000100 Q 0 011010101011111 L 1 111001011110011 Q 1 011000001101000 L 2 111110110101010 Q 2 011111100110001 L 3 111100010011101 Q 3 011101000000110 L 4 110011000101111 Q 4 010010010110100 L 5 110001100011000 Q 5 010000110000011 L 6 110110001000001 Q 6 010111011011010 L 7 110100101110110 Q 7 010101111101101 M 0 101010000010010 H 0 001011010001001 M 1 101000100100101 H 1 001001110111110 M 2 101111001111100 H 2 001110011100111 M 3 101101101001011 H 3 001100111010000 M 4 100010111111001 H 4 000011101100010 M 5 100000011001110 H 5 000001001010101 M 6 100111110010111 H 6 000110100001100 M 7 100101010100000 H 7 000100000111011 37

8 Aplikace pro generování štítků s čárovými kódy Druhou částí této práce je knihovna v jazyce c#, která generuje štítky s čárovými popřípadě QR kódy. V této knihově jsou implementovány čárové kódy EAN 8, EAN 13, kód 2/5 industrial, kód 2/5 interleaved, code 39 a v neposlední řadě také QR code. Knihovna umožňuje nastavení veškerých parametrů, které kódy potřebují. Lze zadat velikost čárového kódu v centimetrech při zvoleném vlastním DPI. Mezi další nastavení patří: kontrola vstupních data dle standardů povolení či zakázání výpočtu kontrolního znaku včetně zadání váhy, se kterou se má počítat zobrazení či skrytí kódovaného textu volba typu obrázku JPG nebo PNG volba barev pozadí i čárového kódu 38

Obrázek 11 - třídní diagram knihovny pro generování čárových kódů 39

Pro ukázku funkčnosti je tato knihovna využita v aplikaci pro generování čárových kódů s možností hromadného generování. Aplikace využívá všech možností vytvořené knihovny a tedy nastavení všech parametrů čárových kódů. Obrázek 12 - náhled aplikace pro generování jednotlivých kódů Aplikace navíc umožňuje generovat čárové kódy hromadně a vkládat je do PDF souboru. Nastavit lze rozměry stránky v dokumentu (předdefinované jsou A4, A3 a A5), rozložení kódů a stránce a zobrazení ořezových značek. Data pro hromadné generování jsou získávány z XML souboru. Pokud nastanou při generování nějaké chyby, je o tom uživatel na konci upozorněn a může si zobrazit protokol chyb. 40

Obrázek 13 - náhled aplikace pro hromadné generování kódů 8.1 XML specifikace XML je speciální datový soubor obsahující informace a nastavení čárových kódů, které se mají vygenerovat. Nepovinné údaje lze vynechat a místo nich budou použity defaultní hodnoty. Obrázek 14 - příklad XML pro dávkové generování 41

Význam jednotlivých značek (pokud není uvedeno jinak, jedná se o povinné údaje): barecodes Je to značka, v níž jsou uzavřeny informace a nastavení jednotlivých kódů. Atributy, které obsahuje, jsou povinné a mají následující význam. width šířka v centimetrech heigth výška v centimetrech dpi počet pixelů na palec type typ generovaných čárových kódů. Povolené hodnoty jsou EAN8, EAN13, CODE39, 2OF5INDUSTRIAL, 2OF5INTERLEAVED, QRCODE barecode značka uzavírající informace a nastavení jednoho čárového kódu. id Značka označující identifikátor čárového kódu. text značka označující text k zakódování color Značka obsahující atributy pro nastavení barvy pozadí a textu čárového kódu. Význam atributů: background barva pozadí v hexadecimální #RGB tvaru foreground barva čar a textu v hexadecimální #RGB tvaru checknumber Značka je nepovinná. Označuje, zda má nebo nemá být vypočítán kontrolní znak. Nabývá hodnot 0 (nepočítat) nebo 1 (počítat). Atribut weight nabývá hodnot 0-9 a označuje parametr pro výpočet kontrolního znaku. disptext Značka je nepovinná. Označuje, zda má nebo nemá být vložen do kódu kódovaný text. Nabývá hodnot 0 (nezobrazit) nebo 1 (zobrazit). Atribut size označuje poměr mezi výškou textu a výškou čárového kódu. elmspacerate Značka je nepovinná. Označuje poměr mezi mezerou a elementem čárového kódu. Doporučují se hodnoty od 1 do 3. rate Značka je nepovinná. Označuje poměr mezi tlustým a tenkým elementem čárového kódu. version značka je nepovinná. Označuje verzi QR code. Nabývá hodnot od 1 do 40. 42

errcorrect Značka je nepovinná. Označuje stupeň korekce chyb u QR code. Nabývá hodnot L, M, Q, H. mode Značka je nepovinná. Označuje typ kódování u QR code. Nabývá hodnot: NUM numerický mód ALPHA alfanumerický mód BYTE byte mód 43

9 Porovnání dostupných generátorů štítků Na trhu je k dispozici mnoho profesionálních generátorů čárových kódů, nicméně k porovnání jsem vybral aplikace, které jsou volně dostupné. Jedná se o generátor štítků od firmy Han-soft dostupný na adrese www.han-soft.com/barcodegen.php, Zint Barcode Generator dostupný na adrese sourceforge.net/projects/zint/ a Bytescout BarCode Generator dostupný na adrese bytescout.com/products/enduser/misc/barcodegenerator.html. generátor štítků od firmy Han-soft tento generátor překypuje všemi možnými typy kódů a okamžitě zobrazuje náhled generovaného kódu. Nicméně zde je několik nedostatků. Chybí zadávání velikostí kódu v centimetrech včetně dpi. Nefunguje tisk. Kód EAN13 neformátuje dle standardu. Zobrazuje nastavení, které se ke kódu nevztahuje Zint Barcode Generator Generátor Zint kromě 1D čárových kódů umí také generovat 2D kódy. I tato aplikace zobrazuje náhled generovaného kódu okamžitě a navíc umí generovat rozsahy kódů dle zadání či z importovaného souboru. Nicméně i u tohoto generátoru budeme marně hledat některá nastavení: velikosti v centimetrech u QR code současné nastavení verze a stupně korekce váha při výpočtu kontrolního znaku Bytescout BarCode Generator Tento generátor je asi nejpovedenější ze všech zmíněných. Umí generovat jak 1D, tak 2D kódy. Nastavení je přehledné a srozumitelné. Jediné výtky by byly opětovně k nastavění vah pro výpočet kontrolního znaku, špatnému zobrazení kódu EAN a zobrazení náhledu kódu (když je kód větší než pole pro vykreslení tak jej nelze nijak posouvat). 44

10 Závěr Hlavní cílem této práce bylo popsat a následně prakticky implementovat problematiku čárových kódů. Popsal nejpoužívanější typy kódů, přičemž jsem se snažil vybrat kódy s různými specifiky a vlastnostmi. Vytvořená knihovna s implementací čárových kódu dle mého názoru je zdařilá a univerzální pro různé užití. Nad touto knihovnou jsem vytvořil aplikaci pro generování štítků, která ukazuje její přednosti v nastavení jednotlivých kódů a umožňuje také jejich hromadné generování. Do budoucna by knihovna mohla obsahovat implementace dalších čárových kódů a další jejich nastavení, které by vyplynulo z jejího užívání v praxi (např. otáčení čárových kódů o zadaný úhel, doimplementování dalších kódovacích módů do QR code, atd. ). Práce s čárovými kódy mě velmi zaujala, protože jsem mohl proniknout do tajů čárových kódů a už to pro mě nejsou jen směsice čar a čtverečků. 45

11 Použité zdroje [1] BENADIKOVÁ, A. Čárové kódy - automatická identifikace. Praha, 1994, 251 s. ISBN 80-856-2366-8. [2] BarCode 1 Information About Bar Code UPC [online]. Copyright 1995 -, 19.1 2012 [cit. 2012-04-22]. Dostupné z: http://www.adams1.com [3] ISO/IEC 18004. Information technology Automatic identification and data capture techniques Bar code symbology QR Code. Switzerland: ISO copyright office, 2000. [4] Reed Solomon error correction. Reed Solomon error correction [online]. 9.4. 2012 [cit. 2012-04-25]. Dostupné z: http://en.wikipedia.org/wiki/reed%e2%80%93solomon_error_correction 46

12 Přílohy 12.1 Příloha č. 1 Aplikace na generování čárových kódů Příloha na CD 47