QR kód
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ý EAN čárový kód. Specifikace QR kódů je od června 2000 standardem ISO 18004. Standard byl upraven v roce 2006. 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.
Geometrická vrstva
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ů.
v | Strana | Plocha | Finders | Timing | Verze | A | Alignments | Zbývá | Vzdálenosti alignments |
---|---|---|---|---|---|---|---|---|---|
1 | 21 | 441 | 192 | 10 | 0 | 0 | 0 | 239 | - |
2 | 25 | 625 | 192 | 18 | 0 | 1 | 25 | 390 | - |
3 | 29 | 841 | 192 | 26 | 0 | 1 | 25 | 598 | - |
4 | 33 | 1089 | 192 | 34 | 0 | 1 | 25 | 838 | - |
5 | 37 | 1369 | 192 | 42 | 0 | 1 | 25 | 1110 | - |
6 | 41 | 1681 | 192 | 50 | 0 | 1 | 25 | 1414 | - |
7 | 45 | 2025 | 192 | 58 | 36 | 2 | 140 | 1599 | 16 |
8 | 49 | 2401 | 192 | 66 | 36 | 2 | 140 | 1967 | 18 |
9 | 53 | 2809 | 192 | 74 | 36 | 2 | 140 | 2367 | 20 |
10 | 57 | 3249 | 192 | 82 | 36 | 2 | 140 | 2799 | 22 |
11 | 61 | 3721 | 192 | 90 | 36 | 2 | 140 | 3263 | 24 |
12 | 65 | 4225 | 192 | 98 | 36 | 2 | 140 | 3759 | 26 |
13 | 69 | 4761 | 192 | 106 | 36 | 2 | 140 | 4287 | 28 |
14 | 73 | 5329 | 192 | 114 | 36 | 3 | 305 | 4682 | 20 |
15 | 77 | 5929 | 192 | 122 | 36 | 3 | 305 | 5274 | 22 |
16 | 81 | 6561 | 192 | 130 | 36 | 3 | 305 | 5898 | 24 |
17 | 85 | 7225 | 192 | 138 | 36 | 3 | 305 | 6554 | 24 |
18 | 89 | 7921 | 192 | 146 | 36 | 3 | 305 | 7242 | 26 |
19 | 93 | 8649 | 192 | 154 | 36 | 3 | 305 | 7962 | 28 |
20 | 97 | 9409 | 192 | 162 | 36 | 3 | 305 | 8714 | 28 |
21 | 101 | 10201 | 192 | 170 | 36 | 4 | 520 | 9283 | 22 |
22 | 105 | 11025 | 192 | 178 | 36 | 4 | 520 | 10099 | 24 |
23 | 109 | 11881 | 192 | 186 | 36 | 4 | 520 | 10947 | 24 |
24 | 113 | 12769 | 192 | 194 | 36 | 4 | 520 | 11827 | 26 |
25 | 117 | 13689 | 192 | 202 | 36 | 4 | 520 | 12739 | 26 |
26 | 121 | 14641 | 192 | 210 | 36 | 4 | 520 | 13683 | 28 |
27 | 125 | 15625 | 192 | 218 | 36 | 4 | 520 | 14659 | 28 |
28 | 129 | 16641 | 192 | 226 | 36 | 5 | 785 | 15402 | 24 |
29 | 133 | 17689 | 192 | 234 | 36 | 5 | 785 | 16442 | 24 |
30 | 137 | 18769 | 192 | 242 | 36 | 5 | 785 | 17514 | 26 |
31 | 141 | 19881 | 192 | 250 | 36 | 5 | 785 | 18618 | 26 |
32 | 145 | 21025 | 192 | 258 | 36 | 5 | 785 | 19754 | 26 |
33 | 149 | 22201 | 192 | 266 | 36 | 5 | 785 | 20922 | 28 |
34 | 153 | 23409 | 192 | 274 | 36 | 5 | 785 | 22122 | 28 |
35 | 157 | 24649 | 192 | 282 | 36 | 6 | 1100 | 23039 | 24 |
36 | 161 | 25921 | 192 | 290 | 36 | 6 | 1100 | 24303 | 26 |
37 | 165 | 27225 | 192 | 298 | 36 | 6 | 1100 | 25599 | 26 |
38 | 169 | 28561 | 192 | 306 | 36 | 6 | 1100 | 26927 | 26 |
39 | 173 | 29929 | 192 | 314 | 36 | 6 | 1100 | 28287 | 28 |
40 | 177 | 31329 | 192 | 322 | 36 | 6 | 1100 | 29679 | 28 |
Informační vrstva
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:
Kód | Popis | Vzorec | Perioda |
---|---|---|---|
000 | Šachovnice | (x+y) mod 2 | 2×2 |
001 | Vodorovné pruhy | y mod 2 | 1×2 |
010 | Svislé pruhy ob 2 | x mod 3 | 3×1 |
011 | Diagonální pruhy ob 2 | (x+y) mod 3 | 3×3 |
100 | Šachovnice obdélníků 3×2 | (⌊y/2⌋+⌊x/3⌋) mod 2 | 6×4 |
101 | První velká dlaždice | (x*y) mod 3 + (x*y) mod 2 | 6×6 |
110 | Druhá velká dlaždice | ((x*y) mod 3 + (x*y)) mod 2 | 6×6 |
111 | Třetí velká dlaždice | ((x*y) mod 3 + (x+y)) mod 2 | 6×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 Reed-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. Reed-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ý (x-α0)*(x-α1)*…*(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í.
v | Zbytek bodů | Formát a bod | Info Bitů | Do bytu | Info Bytů | L (kód 01) | M (kód 00) | Q (kód 11) | H (kód 10) | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bloků | Max. blok | EC bytů | Celkem dat | Bloků | Max. blok | EC bytů | Celkem dat | Bloků | Max. blok | EC bytů | Celkem dat | Bloků | Max. blok | EC bytů | Celkem dat | ||||||
1 | 239 | 31 | 208 | 0 | 26 | 1 | 26 | 7 | 19 | 1 | 26 | 10 | 16 | 1 | 26 | 13 | 13 | 1 | 26 | 17 | 9 |
2 | 390 | 31 | 359 | 7 | 44 | 1 | 44 | 10 | 34 | 1 | 44 | 16 | 28 | 1 | 44 | 22 | 22 | 1 | 44 | 28 | 16 |
3 | 598 | 31 | 567 | 7 | 70 | 1 | 70 | 15 | 55 | 1 | 70 | 26 | 44 | 2 | 35 | 18 | 34 | 2 | 35 | 22 | 26 |
4 | 838 | 31 | 807 | 7 | 100 | 1 | 100 | 20 | 80 | 2 | 50 | 18 | 64 | 2 | 50 | 26 | 48 | 4 | 25 | 16 | 36 |
5 | 1110 | 31 | 1079 | 7 | 134 | 1 | 134 | 26 | 108 | 2 | 67 | 24 | 86 | 4 | 34 | 18 | 62 | 4 | 34 | 22 | 46 |
6 | 1414 | 31 | 1383 | 7 | 172 | 2 | 86 | 18 | 136 | 4 | 43 | 16 | 108 | 4 | 43 | 24 | 76 | 4 | 43 | 28 | 60 |
7 | 1599 | 31 | 1568 | 0 | 196 | 2 | 98 | 20 | 156 | 4 | 49 | 18 | 124 | 6 | 33 | 18 | 88 | 5 | 40 | 26 | 66 |
8 | 1967 | 31 | 1936 | 0 | 242 | 2 | 121 | 24 | 194 | 4 | 61 | 22 | 154 | 6 | 41 | 22 | 110 | 6 | 41 | 26 | 86 |
9 | 2367 | 31 | 2336 | 0 | 292 | 2 | 146 | 30 | 232 | 5 | 59 | 22 | 182 | 8 | 37 | 20 | 132 | 8 | 37 | 24 | 100 |
10 | 2799 | 31 | 2768 | 0 | 346 | 4 | 87 | 18 | 274 | 5 | 70 | 26 | 216 | 8 | 44 | 24 | 154 | 8 | 44 | 28 | 122 |
11 | 3263 | 31 | 3232 | 0 | 404 | 4 | 101 | 20 | 324 | 5 | 81 | 30 | 254 | 8 | 51 | 28 | 180 | 11 | 37 | 24 | 140 |
12 | 3759 | 31 | 3728 | 0 | 466 | 4 | 117 | 24 | 370 | 8 | 59 | 22 | 290 | 10 | 47 | 26 | 206 | 11 | 43 | 28 | 158 |
13 | 4287 | 31 | 4256 | 0 | 532 | 4 | 133 | 26 | 428 | 9 | 60 | 22 | 334 | 12 | 45 | 24 | 244 | 16 | 34 | 22 | 180 |
14 | 4682 | 31 | 4651 | 3 | 581 | 4 | 146 | 30 | 461 | 9 | 65 | 24 | 365 | 16 | 37 | 20 | 261 | 16 | 37 | 24 | 197 |
15 | 5274 | 31 | 5243 | 3 | 655 | 6 | 110 | 22 | 523 | 10 | 66 | 24 | 415 | 12 | 55 | 30 | 295 | 18 | 37 | 24 | 223 |
16 | 5898 | 31 | 5867 | 3 | 733 | 6 | 123 | 24 | 589 | 10 | 74 | 28 | 453 | 17 | 44 | 24 | 325 | 16 | 46 | 30 | 253 |
17 | 6554 | 31 | 6523 | 3 | 815 | 6 | 136 | 28 | 647 | 11 | 75 | 28 | 507 | 16 | 51 | 28 | 367 | 19 | 43 | 28 | 283 |
18 | 7242 | 31 | 7211 | 3 | 901 | 6 | 151 | 30 | 721 | 13 | 70 | 26 | 563 | 18 | 51 | 28 | 397 | 21 | 43 | 28 | 313 |
19 | 7962 | 31 | 7931 | 3 | 991 | 7 | 142 | 28 | 795 | 14 | 71 | 26 | 627 | 21 | 48 | 26 | 445 | 25 | 40 | 26 | 341 |
20 | 8714 | 31 | 8683 | 3 | 1085 | 8 | 136 | 28 | 861 | 16 | 68 | 26 | 669 | 20 | 55 | 30 | 485 | 25 | 44 | 28 | 385 |
21 | 9283 | 31 | 9252 | 4 | 1156 | 8 | 145 | 28 | 932 | 17 | 68 | 26 | 714 | 23 | 51 | 28 | 512 | 25 | 47 | 30 | 406 |
22 | 10099 | 31 | 10068 | 4 | 1258 | 9 | 140 | 28 | 1006 | 17 | 74 | 28 | 782 | 23 | 55 | 30 | 568 | 34 | 37 | 24 | 442 |
23 | 10947 | 31 | 10916 | 4 | 1364 | 9 | 152 | 30 | 1094 | 18 | 76 | 28 | 860 | 25 | 55 | 30 | 614 | 30 | 46 | 30 | 464 |
24 | 11827 | 31 | 11796 | 4 | 1474 | 10 | 148 | 30 | 1174 | 20 | 74 | 28 | 914 | 27 | 55 | 30 | 664 | 32 | 47 | 30 | 514 |
25 | 12739 | 31 | 12708 | 4 | 1588 | 12 | 133 | 26 | 1276 | 21 | 76 | 28 | 1000 | 29 | 55 | 30 | 718 | 35 | 46 | 30 | 538 |
26 | 13683 | 31 | 13652 | 4 | 1706 | 12 | 143 | 28 | 1370 | 23 | 75 | 28 | 1062 | 34 | 51 | 28 | 754 | 37 | 47 | 30 | 596 |
27 | 14659 | 31 | 14628 | 4 | 1828 | 12 | 153 | 30 | 1468 | 25 | 74 | 28 | 1128 | 34 | 54 | 30 | 808 | 40 | 46 | 30 | 628 |
28 | 15402 | 31 | 15371 | 3 | 1921 | 13 | 148 | 30 | 1531 | 26 | 74 | 28 | 1193 | 35 | 55 | 30 | 871 | 42 | 46 | 30 | 661 |
29 | 16442 | 31 | 16411 | 3 | 2051 | 14 | 147 | 30 | 1631 | 28 | 74 | 28 | 1267 | 38 | 54 | 30 | 911 | 45 | 46 | 30 | 701 |
30 | 17514 | 31 | 17483 | 3 | 2185 | 15 | 146 | 30 | 1735 | 29 | 76 | 28 | 1373 | 40 | 55 | 30 | 985 | 48 | 46 | 30 | 745 |
31 | 18618 | 31 | 18587 | 3 | 2323 | 16 | 146 | 30 | 1843 | 31 | 75 | 28 | 1455 | 43 | 55 | 30 | 1033 | 51 | 46 | 30 | 793 |
32 | 19754 | 31 | 19723 | 3 | 2465 | 17 | 145 | 30 | 1955 | 33 | 75 | 28 | 1541 | 45 | 55 | 30 | 1115 | 54 | 46 | 30 | 845 |
33 | 20922 | 31 | 20891 | 3 | 2611 | 18 | 146 | 30 | 2071 | 35 | 75 | 28 | 1631 | 48 | 55 | 30 | 1171 | 57 | 46 | 30 | 901 |
34 | 22122 | 31 | 22091 | 3 | 2761 | 19 | 146 | 30 | 2191 | 37 | 75 | 28 | 1725 | 51 | 55 | 30 | 1231 | 60 | 47 | 30 | 961 |
35 | 23039 | 31 | 23008 | 0 | 2876 | 19 | 152 | 30 | 2306 | 38 | 76 | 28 | 1812 | 53 | 55 | 30 | 1286 | 63 | 46 | 30 | 986 |
36 | 24303 | 31 | 24272 | 0 | 3034 | 20 | 152 | 30 | 2434 | 40 | 76 | 28 | 1914 | 56 | 55 | 30 | 1354 | 66 | 46 | 30 | 1054 |
37 | 25599 | 31 | 25568 | 0 | 3196 | 21 | 153 | 30 | 2566 | 43 | 75 | 28 | 1992 | 59 | 55 | 30 | 1426 | 70 | 46 | 30 | 1096 |
38 | 26927 | 31 | 26896 | 0 | 3362 | 22 | 153 | 30 | 2702 | 45 | 75 | 28 | 2102 | 62 | 55 | 30 | 1502 | 74 | 46 | 30 | 1142 |
39 | 28287 | 31 | 28256 | 0 | 3532 | 24 | 148 | 30 | 2812 | 47 | 76 | 28 | 2216 | 65 | 55 | 30 | 1582 | 77 | 46 | 30 | 1222 |
40 | 29679 | 31 | 29648 | 0 | 3706 | 25 | 149 | 30 | 2956 | 49 | 76 | 28 | 2334 | 68 | 55 | 30 | 1666 | 81 | 46 | 30 | 1276 |
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).
v | Numericky | Alfanumericky | Bytově | Kanji |
---|---|---|---|---|
1-9 | 10 | 9 | 8 | 8 |
10-26 | 12 | 11 | 16 | 10 |
27-40 | 14 | 13 | 16 | 12 |
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.
- kontakt -
- událost do kalendáře - .ical
- platba - .spayd, podle standardu Short Payment Descriptor
- apod.
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é alikace, kteru 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 aktivní "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 rozpracová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ě)