QR kód

QR kód verze 8 obsahující HTML odkazy

QR kód (anglicky: QR code, slang. a nepříliš správné označení je také labyrinth, případně bludiště) je prostředek pro automatizovaný sběr dat. Zkratka vychází z anglického „Quick Response“, tedy kódy rychlé reakce. QR kód dokáže zakódovat mnohem větší množství dat, než klasický čárový kód EAN. Specifikace QR kódů je od června 2000 standardem ISO 18004. Standard byl upraven v roce 2006.[1] Kódy jsou určeny pro počítačové zpracování, využívají velké množství technik předcházejících chybám interpretace. Kód přestává být čitelným až po odstranění či znečištění velké části kódu. Algoritmům rozpoznávání kódu nevadí otáčení kódu ani inverze barev, kód nevyžaduje velký kontrast barev. Kódy jsou definovány v 40 velikostních verzích (od 1 do 40). Kód verze v je tvořen čtvercovou mřížkou bodů rozměru 17 + 4·v. Kód se skládá z několika informačních vrstev, které slouží různým účelům a používají různé algoritmy.

Vlastnosti

Kapacita

QR kód může obsahovat písmena, čísla nebo japonské znaky kandži a je schopný pojmout různé množství informací podle obsahu:

Typ obsahuPočet znaků
číslice7 089
písmena a číslice4 296
8bitová data2 953
kandži1 817

Popis

Geometrická vrstva

Struktura QR kódu, zvýrazněné funkční elementy
1. Informace o verzi
2. Informace o formátu
3. Data a samoopravné kódy
4. Povinné vzory
5. Tichá zóna
Kód na památkách v Praze 10 z roku 2012
QR kód použitý na čínské jízdence na vlak

Tato vrstva slouží k přesné lokalizaci geometrických pozic, kde mají být čteny informační bity. Základem této vrstvy je jednobarevná „tichá zóna“ šířky alespoň 4 body ohraničující celý kód. O barvě tiché vrstvy se hovoří jako o bílé, a barvě k ní kontrastní jako o barvě černé, což koresponduje i s jejich grafickou reprezentací. Při dekódování je určena průměrná tmavost celého kódu a z hlediska rozpoznávání je každý bod buď světlejší, nebo tmavší. Rozměry bodů (základních čtverečků) jsou při dekódování primárně určovány podle čtverců velikosti 7×7 tzv. Finders které jsou ve třech rozích kódu. Uvnitř černého čtverce 7×7 je bílý obvod čtverce 5×5, vnitřek 3×3 je černý. Tyto čtverce jsou od zbytku kódu odděleny bílým proužkem, společně s tímto proužkem tak vytvářejí čtverce 8×8. Nejvíc vnější černý pixel prostředního Finder čtverce slouží jako souřadnice [0, 0]. Všechny verze kódu mají vyhrazen 6. řádek a sloupec na tzv. Timing vzor, v němž se mezi Finders střídají černé a bílé body (černá na lichých pozicích). Ve verzi 1 je geometrická vrstva tvořena pouze pomocí Finders a Timing. V ostatních verzích je použit jeden či více tzv. Alignments.

V modelu 1 QR kódů byly jako Alignments použity malé obdélníčky na krajích kódu. Model zřejmě nebyl dostatečně odolný vůči deformacím a byl nahrazen modelem 2, který se pak celosvětově rozšířil. Zde je popsán model 2 QR kódů. Alignment je obdobně jako Finder tvořen třemi soustřednými čtverci, nyní ale je vnitřní tvořen jediným černým bodem, okolo něj je obvod bílého čtverce 3×3 a okolo něj obvod černého čtverce 5×5. Pokud je horní celá část z (1 + v) / 7 označena A, tak verze v obsahuje A×A Alignments v pravidelných rozestupech konče Alignment se středem na souřadnici [(10 + 4·v), (10 + 4·v)] (tedy [-7, -7] od rohu bez Finder). Vzdálenosti středů sousedních Alignments je dán výrazem (((10 + 4·v) - 6) / A - 0,6) zaokrouhleným nahoru na sudé číslo. Kromě těchto Alignments jsou ve stejných sloupcích či řádkách přidány Alignments i na řádek 6 a sloupec 6, pokud tomu nebrání Finders. Na každý Timing pattern tak přibylo A - 1 Alignments. Od verze 7 výše je navíc číslo verze zabezpečené do délky 18 bitů zapsáno do 3×6 obdélníků dotýkajících se vnějších Finders směrem k souřadnici [0, 0]. Pořadí bitů je od nejmenší souřadnice po největší, po trojicích. Dosud je vzor stále symetrický vůči úhlopříčce procházející bodem [0, 0]. (Oněch 18 bitů vznikne jako BCH kód vzniklý doplněním binárního čísla verze v nejvyšších 6 bitech 12 bity tak, aby jednotlivé bity tvořily koeficienty polynomu nad bity, dávající zbytek nula vůči polynomu s koeficienty nad bity 1111100100101).

Při dekódování slouží jednotlivé Alignments na rozdělení kódu na jednotlivé podoblasti. V podoblastech jsou korigovány geometrické deformace nezávisle. I v případě prohnutého kódu či kódu sejmutého šikmo geometrická vrstva dostatečně přesně lokalizuje středy jednotlivých bodů.

Geometrická vrstva v číslech
vStranaPlochaFindersTimingVerzeAAlignmentsZbýváVzdálenosti alignments
12144119210000239-
225625192180125390-
329841192260125598-
4331089192340125838-
53713691924201251110-
64116811925001251414-
745202519258362140159916
849240119266362140196718
953280919274362140236720
1057324919282362140279922
1161372119290362140326324
1265422519298362140375926
13694761192106362140428728
14735329192114363305468220
15775929192122363305527422
16816561192130363305589824
17857225192138363305655424
18897921192146363305724226
19938649192154363305796228
20979409192162363305871428
2110110201192170364520928322
22105110251921783645201009924
23109118811921863645201094724
24113127691921943645201182726
25117136891922023645201273926
26121146411922103645201368328
27125156251922183645201465928
28129166411922263657851540224
29133176891922343657851644224
30137187691922423657851751426
31141198811922503657851861826
32145210251922583657851975426
33149222011922663657852092228
34153234091922743657852212228
351572464919228236611002303924
361612592119229036611002430326
371652722519229836611002559926
381692856119230636611002692726
391732992919231436611002828728
401773132919232236611002967928

Informační vrstva

QR kód jenž v obou převráceních dává smysluplný výsledek (08331025600800024 či 42256900000801139), jedná se o kód nalezený po třech dnech hledání. Informace o masce a úrovni zabezpečení nutně musí obsahovat chyby v obou převráceních, v tomto nalezeném případě je v každém převrácení 8 datových chyb, ale zvolená nejvyšší úroveň zotavování se z chyb je dokáže opravit.

V informační vrstvě každý černý bod kóduje binární jedničku a bílý bod binární nulu. V řádku 8 a sloupci 8 je vedle Finders uložena informace sloužící k dekódování informací hlavního datového toku. Hlavní datový tok vyplňuje dosud nevyužité body v následujícím pořadí: Začíná v rohu s maximální souřadnicí. Vždy postoupí o jedno vlevo, pak se vrátí a postoupí o 1 vertikálně. Začíná postupovat nahoru a po vyplnění krajních dvou sloupců sestupuje v následujících dvou sloupcích dolů. Takto střídá dvojice sloupců, dokud nenarazí na sloupec 6. Ten přeskočí a pokračuje v dvousloupci 4-5. Průchod končí v levém dolním rohu. Vzhledem k tomu, že v závislosti na kódovaných datech by mohly vznikat vzory matoucí geometrickou vrstvu, je hlavní datový tok maskován. Je vytvořeno 8 jednoduchých maskovacích vzorů a na příslušných souřadnicích je ukládaná negovaná hodnota. Negují se body dávající 0 v následujících výrazech:

Maskování
KódPopisVzorecPerioda
000Šachovnice(x+y) mod 22×2
001Vodorovné pruhyy mod 21×2
010Svislé pruhy ob 2x mod 33×1
011Diagonální pruhy ob 2(x+y) mod 33×3
100Šachovnice obdélníků 3×2(⌊y/2⌋+⌊x/3⌋) mod 26×4
101První velká dlaždice(x*y) mod 3 + (x*y) mod 26×6
110Druhá velká dlaždice((x*y) mod 3 + (x*y)) mod 26×6
111Třetí velká dlaždice((x*y) mod 3 + (x+y)) mod 26×6

Datový tok obsahuje bytovou zprávu a zabezpečovací byty. U větších verzí je datová zpráva rozdělena do bloků, kde každý blok má samostatné zotavování se z chyb. Pro každou verzi jsou definovány 4 úrovně zabezpečení. Každá úroveň definuje, na jaké bloky se zpráva rozpadá a kolik zabezpečovacích bytů je pro bloky používáno (počet zabezpečovacích bytů je pro všechny bloky stejný, ale délky bloků se mohou o 1 byte lišit). Vzorec pro určení rozkladu na bloky se mi nepodařilo odvodit, pravděpodobně nebyl generován, ale byl určen ad hoc. Nezbývá než se řídit tabulkou dle specifikace (viz níže). Hlavní datový tok je tvořen prvním bytem prvního bloku, pak prvním bytem druhého bloku, prvním třetího …, pak druhým bytem prvního atd. Pokud nejsou všechny bloky stejně dlouhé, jsou nejprve bloky kratší (délky D) a nakonec bloky delší (D+1). V takovém případě po skončení D-tého bytu posledního bloku následuje poslední blok prvního bloku délky D+1. Až po ukončení bytové zprávy následují zabezpečovací byty počínaje prvním bytem prvního bloku, pak prvním druhého … až posledním bytem posledního bloku. Zbývá-li pro danou verzi počet bitů pro datový tok nedělitelný 8, je konec datového toku doplněn nulami (to že nejsou ukládány celé bloky, ale jsou bloky prokládány, zvyšuje odolnost proti lokálnímu zašpinění či chybějícímu kusu kódu, protože malé chyby ve více blocích problém nejsou na rozdíl od velké chyby v jednom bloku).

Informace uložená vedle Finders v osmém řádku a sloupci v 15 bitech pomocí BCH kódu dvěma bity určuje úroveň zabezpečení a třemi bity masku. Těchto 5 bitů v nejvyšších řádech je doplněno 10 bity tak, aby jednotlivé bity tvořily koeficienty polynomu nad bity, dávající zbytek nula vůči polynomu s koeficienty nad bity 10100110111 (minimální polynom s kořeny α1, …, α6 nad GF(24)). Výsledné bity jsou navíc maskovány s 101010000010010. Bity jsou uloženy zleva doprava od nejvýznamnějšího, ale shora dolů od nejméně významného. Bit na souřadnici 8×8 je součástí svislého zápisu. Vedle dolního levého Finder je nahoře vždy bezvýznamný černý bod.

Zabezpečení bloku pomocí K zabezpečovacích bytů je zajištěno Reedovými–Solomonovými kódy nad tělesem GF(28), kde prvky tělesa jsou ztotožněny s byty tak, že bitový zápis je vnímán jako koeficienty polynomu nad bity a tyto polynomy jsou brány modulo polynom s koeficienty bitově 100011101. Primitivním prvkem tohoto tělesa je α=2. Reedovy–Solomonovy kódy vzniknou doplněním polynomu, kde nejvyšší řády budou tvořeny zprávou, pomocí takových koeficientů, aby byl výsledný polynom dělitelný (x0)*(x1)*…*(x(K-1)).

Dle normy má být QR kód vytvořen tak, že vytvoříme 8 variant dle jednotlivých možností maskování a vybereme masku s nejmenší "nevhodností". Tato nevhodnost je definována čtyřmi ukazateli. První trestá jednobarevné úseky řádků či sloupců délky aspoň 5. Za úsek délky 5+k dává 3+k trestných bodů. Druhá trestá třemi body každý jednobarevný čtverec velikosti 2×2 (tedy například za každý Finder dává 4 krát 3 trestných bodů). Třetí trestá vzory WWWWBWBBBWB a BWBBBWBWWWW kde W značí bílou a B černou barvu. Vzor WWWWBWBBBWBWWWW je trestán jen jednou. Tyto vzory dostávají po 40 trestných bodech. Poslední ukazatel hodnotí odchylku od 50% naplnění černou barvou. Překročení o každých 5% je trestáno 10 body (poslední ukazatel zajišťuje, aby průměrná barva byla dostatečně vzdálena jak od bílé, tak černé barvy).

Při dekódování ale kontrola existence efektivnějšího zamaskování prováděna nebývá a nezvolení optimální masky nebývá důvodem pro prohlášení kódu za nevalidní.

Informační vrstva v číslech
vZbytek bodůFormát a bodInfo BitůDo bytuInfo BytůL (kód 01)M (kód 00)Q (kód 11)H (kód 10)
BlokůMax. blokEC bytůCelkem datBlokůMax. blokEC bytůCelkem datBlokůMax. blokEC bytůCelkem datBlokůMax. blokEC bytůCelkem dat
12393120802612671912610161261313126179
2390313597441441034144162814422221442816
3598315677701701555170264423518342352226
483831807710011002080250186425026484251636
511103110797134113426108267248643418624342246
614143113837172286181364431610844324764432860
715993115680196298201564491812463318885402666
81967311936024221212419446122154641221106412686
923673123360292214630232559221828372013283724100
102799312768034648718274570262168442415484428122
11326331323204044101203245813025485128180113724140
123759313728046641172437085922290104726206114328158
134287314256053241332642896022334124524244163422180
144682314651358141463046196524365163720261163724197
1552743152433655611022523106624415125530295183724223
1658983158673733612324589107428453174424325164630253
1765543165233815613628647117528507165128367194328283
1872423172113901615130721137026563185128397214328313
1979623179313991714228795147126627214826445254026341
20871431868331085813628861166826669205530485254428385
21928331925241156814528932176826714235128512254730406
22100993110068412589140281006177428782235530568343724442
23109473110916413649152301094187628860255530614304630464
241182731117964147410148301174207428914275530664324730514
2512739311270841588121332612762176281000295530718354630538
2613683311365241706121432813702375281062345128754374730596
2714659311462841828121533014682574281128345430808404630628
2815402311537131921131483015312674281193355530871424630661
2916442311641132051141473016312874281267385430911454630701
3017514311748332185151463017352976281373405530985484630745
31186183118587323231614630184331752814554355301033514630793
32197543119723324651714530195533752815414555301115544630845
33209223120891326111814630207135752816314855301171574630901
34221223122091327611914630219137752817255155301231604730961
35230393123008028761915230230638762818125355301286634630986
362430331242720303420152302434407628191456553013546646301054
372559931255680319621153302566437528199259553014267046301096
382692731268960336222153302702457528210262553015027446301142
392828731282560353224148302812477628221665553015827746301222
402967931296480370625149302956497628233468553016668146301276

Překlad mezi zprávou a bitovým obsahem

Bitová zpráva, která je předávána v informační vrstvě vzniká „komprimací“ originální zprávy. Zpráva (může být tvořena několika) samostatně kódovanými úseky. Každý úsek začíná čtyřbitovou identifikací režimu kódování. Nejkompaktnější je režim numerický (identifikace 1) umožňující zaznamenat dekadické číslice, s tím, že tři číslice (1000) kóduje pomocí 10 bitů (konec zprávy je kódován minimálním nutným počtem bitů). Následuje co do kompaktnosti režim alfanumerický (identifikace 2), umožňující kódovat i velká písmena, znaky $%*+-./: a mezeru. Těchto 45 znaků je po dvojicích (2025) kódováno pomocí 11 bitů (konec zprávy je kódován minimálním nutným počtem bitů). Bytový režim (identifikace 4) ukládá osmice bitů, existují i další varianty. Za každou identifikací kódování je oznámena délka úseku zprávy kódovaná v daném režimu. Počet bitů nutných k určení této délky záleží jak na režimu, tak na verzi QR kódu (aby byla zajištěna dostatečná kapacita). Úseky zprávy na sebe bitově navazují. Pokud zpráva končí před vyčerpáním kapacity kódu, a zbývá více než byte, je doplněna čtveřicí nul (identifikace režimu konce zprávy), pak je doplněna nulami na celý byte a pak střídavě pomocí 0xEC11 dokud se byty do prostoru pro zprávu vejdou. Typicky je snahou zvolit co nejmenší verzi, do níž se zpráva vejde. Optimální délku bitové zprávy a způsob rozdělení na jednotlivé úseky je možno získat technikou dynamického programování (stačí si při postupném přidávání znaků pamatovat optimální délku bitového obsahu pro každý možný způsob kódování posledního úseku).

Počet bitů kódujících délku úseku zprávy
vNumerickyAlfanumerickyBytověKanji
1-910988
10-2612111610
27-4014131612

Další vrstvy

Norma definuje i způsob jak sdružovat několik QR kódů dohromady. Každý kód ví, o kolikátou z kolika částí se jedná.

Použití

Jsou používány standardy interpretace obsahu zpráv, kdokoli si může vytvořit vlastní QR kód a zveřejnit ho. A uživatelé pak snadno mohou tato data přečíst pomocí QR-čteček v mobilech, fotografickými aplikacemi.

Užití QR kódů je široké:

  • vizitky,
    • telefonní čísla,
    • zejména emailové adresy,
  • pozvánky do kalendáře,
  • příkazy k úhradě do banky,
  • faktury.

Sám QR-kód je jen pouhý free-text, pro usnadnění výměny dat a jejich parsování se zavádějí standardy: nové úzce zaměřené formáty souborů a k nim i nové MIME-typy.

Stále jde o text, ten je však zúžen předepsaným formátem. Díky rozlišitelnosti přípon souborů nebo MIME-type lze pro data registrovat v OS příslušnou aplikaci, která má daná data/typ zpracovat, případně si tato data uživatelé načtou přímo z příslušné aplikace, kterou si za tím účelem sami nejen nainstalují, ba i přímo ručně spustí:

  • kontakty - mobilní aplikací na kontakty, ručně spuštěným importem nebo prostou aktivací "otevřením" souboru,
  • událost - v appce kalendáře,
  • QR platba - data o převodu ve formátu spayd přečtena z QR-kódu a rozparsována, fotoaparátem aktivovaným přímo z appky mobilního bankovnictví, a rovnou předvyplněna do formuláře k převodu z účtu na účet. (obdoba pro EPC QR kód v EU nebo platbu přes QR kód ve světě)

Bezpečnost

Falešné QR kódy představují riziko, protože je člověk nerozezná a může tak spustit škodlivý kód.[2]

Odkazy

Reference

  1. ISO/IEC 18004:2006 [online]. [cit. 2008-05-06]. Dostupné online. (anglicky) 
  2. https://techxplore.com/news/2022-02-qr-codes-safe-scan.html - QR codes: Is it safe to scan?

Související články

Externí odkazy

Média použitá na této stránce

QRpedia in Prague 10 2.JPG
Autor: Petr Vilgus, Licence: CC BY-SA 3.0
QRpedia v Praze 10 – tabulka určená k umístění na kostel Narození Panny Marie
QR LOTERY.png
Autor: Hippo.69, Licence: CC BY-SA 3.0
QR code with two interpretations with almost same probability of reading. Both on the edge of the highest error correction (of different flip).
QR kód verze 8.png
Autor: Scrawler, Licence: CC BY-SA 3.0
QR kód verze 8 (model 2) obsahující html odkazy
QR Code Structure Example 3.svg
Autor: Bobmath, Licence: CC BY-SA 3.0
Example QR code, highlighting functional elements. The QR code content is "MEBKM:TITLE:Wikipedia, the free encyclopedia that anyone can edit.;URL:http\://en.wikipedia.org/wiki/Main_Page;;".
Z80-Tianjin -Beijing.jpg
Autor: Yaohua2000, Licence: CC BY-SA 3.0
Train ticket, Z80, Tianjin to Beijing