Článek
QR kód vypadá křehce. Stačí pár černobílých čtverečků, tři nápadné značky v rozích a mobil z nich během okamžiku vytáhne odkaz, platbu nebo text. Přesto je v něm od začátku zabudovaná zvláštní vlastnost: část kódu může zmizet a data se stále dají obnovit.
Oficiální dokumentace DENSO WAVE uvádí čtyři úrovně korekce chyb. Level L má přibližně sedmiprocentní obnovitelnost, M patnáctiprocentní, Q pětadvacetiprocentní a H zhruba třicetiprocentní. Jenže to neznamená jednoduché pravidlo „zakryju 30 procent obrázku a H vždycky přežije“.
Chtěl jsem zjistit proč. Vytvořil jsem proto čtyři QR kódy se stejným obsahem, stejnou verzí a stejnými rozměry. Lišila se jen úroveň korekce. Potom jsem jim po modulech mazal střed bílým čtvercem a po každém kroku zkusil dekódování stejným softwarem.
Všechny QR kódy měly přesně 37 × 37 modulů
Testovací řetězec měl podobu „FREDDY-CZ-QR-TEST-2026-09-29“. Všechny čtyři varianty jsem vygeneroval jako QR Code Model 2 ve verzi 5, tedy s maticí 37 × 37 modulů. Kolem zůstal standardní čtyřmodulový klidový okraj.
Tím jsem odstranil jednu běžnou komplikaci: kdyby každá úroveň korekce vytvořila jinak velký QR kód, stejná fyzická nálepka by ničila jiný podíl obrazu. Tady byla geometrie stejná od začátku.
Do středu kódu jsem potom vkládal čistě bílý čtverec se stranou 4, 6, 8, 10, 12, 14, 16 a 18 modulů. Po každé změně jsem obraz přečetl přes OpenCV QRCodeDetector 4.13.0. Za úspěch jsem počítal pouze případ, kdy dekodér vrátil celý původní řetězec bez jediné změny.
Pak jsem zakryl jen jeden roh. A všechny čtyři varianty umřely
Druhý test byl ještě zajímavější. Místo velkého bílého čtverce uprostřed jsem vymazal pouze levý horní poziční vzor – čtverec 7 × 7 modulů. Geometricky je to jen 49 z 1 369 modulů, přibližně 3,6 procenta plochy symbolu.
Selhaly všechny čtyři úrovně, včetně H. Stejný QR kód tedy v jednom případě přežil 14,3 procenta zakrytého středu, ale v jiném nedokázal přečíst ani 3,6 procenta poškození.
Důvod je v samotné architektuře QR kódu. Tři výrazné čtverce v rozích nejsou běžná datová políčka. DENSO je popisuje jako position detection patterns – podle nich skener rozpoznává polohu, velikost a natočení kódu. Když jsem jeden z nich kompletně odstranil, OpenCV už symbol nedokázalo spolehlivě lokalizovat a dekódovat.
Takže co vlastně znamená „QR přežije 30 % poškození“?
Marketingová zkratka svádí k představě koláče: třicet procent libovolně přelepím a zbytek stačí. Ve skutečnosti je správnější mluvit o korekci chyb v kódových datech. QR používá Reed-Solomonovu korekci, která přidává redundantní informace, z nichž lze část poškozených dat zrekonstruovat.
Jenže před samotným opravováním musí čtečka nejdřív poznat, že před sebou vůbec má QR kód, zjistit jeho orientaci a správně načíst mřížku. Když poškodíme prvky, které slouží právě k orientaci a synchronizaci, můžeme symbol znefunkčnit mnohem menším zásahem než při poškození obyčejné datové oblasti.
Naopak logo uprostřed QR kódu často funguje právě proto, že výrobce zvolí vyšší úroveň korekce a nechá klíčové poziční vzory v rozích nedotčené. Není to magie a už vůbec ne důkaz, že prostřední třetina QR kódu je zbytečná. Je to využití redundantních dat v kontrolovaném místě.
H není automaticky „nejlepší“ pro všechno
Nejvyšší korekce má cenu. Část kapacity QR kódu musí místo uživatelských dat nést opravné informace. Pro stejný objem textu proto může vyšší level vyžadovat větší verzi kódu nebo hustší symbol.
DENSO samo uvádí, že volba úrovně závisí na prostředí. Vyšší korekce se hodí tam, kde kód může být špinavý nebo poškozený. Nižší level zase nechává více kapacity pro data a může umožnit jednodušší symbol.
V mém testu jsem právě proto všechny varianty natlačil do stejné verze 5. Nešlo o hledání „nejlepšího QR“. Šlo o čisté srovnání stejného obrazu, stejného payloadu a stejného typu poškození.
Co z toho plyne pro QR na vstupence, menu nebo plakátu
Nejdůležitější praktický závěr není „používejte vždy H“. Je mnohem jednodušší: QR kód potřebuje kolem sebe čistý prostor, dobře viditelné poziční značky a dostatečný kontrast. Nálepka přes roh může být horší než větší logo uprostřed.
Stejně opatrný bych byl s designovými zásahy. Pokud se do kódu přidává logo, mění barvy nebo část modulu překrývá grafika, výsledek by se měl testovat na reálných telefonech a za různých podmínek. Můj OpenCV test je reprodukovatelný laboratorní scénář, ne záruka, že stejný symbol přečte každý fotoaparát v šeru nebo zmačkaný na papíře.
A právě v tom je nejhezčí pointa celého experimentu. QR kód není odolný prostě proto, že „umí opravit třicet procent“. Je odolný proto, že přesně ví, které informace může rekonstruovat – ale pořád potřebuje poznat sám sebe.
Zdroje a ověření
• DENSO WAVE – What is a QR Code? — vývoj QR kódu, tři position detection patterns a obecná odolnost proti poškození
• DENSO WAVE – QR Code solutions / specification — úrovně korekce L/M/Q/H přibližně 7/15/25/30 % codeword recoverability
• Médium.cz – Kolik QR kódů lze vytvořit? — použito pouze pro anti-duplication kontrolu; jde o kapacitu a kombinatoriku, ne poškození
• Médium.cz – Restaurace bez papírového menu šetří tisk… — kontrola vlastního publikovaného tématu; článek řeší QR menu, nikoli technickou korekci chyb






