De QR-code
De QR-code (Quick Response Code) is de bekendste tweedimensionale variant van de streepjescode. De originele streepjescode bestaat al sinds 1952, maar de QR-code is pas in 1994 ontworpen. Oorspronkelijk bedacht voor de auto-industrie in Japan, wordt deze techniek nu voor veel meer doeleinden gebruikt: het verspreiden van urls, het verkopen van producten, inloggen op websites, en zelfs het creƫren van virtuele grafplaatsen. De brede verspreiding van deze technologie is mogelijk gemaakt doordat het bedrijf dat het heeft uitgevonden, ervoor gekozen heeft geen patentrecht uit te oefenen.
Types
Er zijn 4 typen QR-codes, geoptimaliseerd voor verschillende verzamelingen karakters. QR-codes van de verschillende typen zien er vrijwel hetzelfde uit; er zijn slechts een paar pixels gereserveerd om op te schrijven van welk type de code is. De types zijn: 1. cijfers, 2. cijfers, hoofdletters, spatie en wat leestekens, 3. binair en 4. Kanji (Chinese tekens, worden veel gebruikt in Japan).
Onderdelen
Laten we eens bekijken hoe een standaard QR-code eruitziet.
Zoals je vast had kunnen raden, worden de drie grote vierkanten in de hoeken gebruikt om de positie van de QR-code te bepalen. Het kleinere vierkant dichtbij de rechteronderhoek dient om de grootte en hoek van de opname te normaliseren (bij de allerkleinste versie is deze er niet, bij grote versies zijn er meerdere). Om de grote vierkanten heen liggen beetjes informatie over de versie en het format van de QR-code. En als je erop let zie je dat er tussen de binnenste hoeken van de grote vierkanten twee lijnen lopen van afwisselend witte en zwarte blokjes: deze worden gebruikt ter ondersteuning om de positie van elk blokje na te gaan. De rest van de code bestaat uit de werkelijke informatie, en foutcorrectie. Om de hele code heen zit een stuk lege ruimte (officieel bestaande uit 4 blokjes) om de code te isoleren.
Versie en format
Ik had het over beetjes informatie over de versie en het format. De versie slaat op de grootte van de QR-code en wordt berekend door (breedte code - 17) / 4. De QR-code hierboven is dus van versie 3, en de kleinst mogelijke QR-code (versie 1) heeft in de lengte en breedte 1 * 4 + 17 = 21 blokjes. De hoogst mogelijke versie is versie 40: 177 bij 177, dus.
De QR-code hierboven bevat eigenlijk geen informatie over de versie, want dat is pas vanaf versie 7 nodig. De QR-code hieronder is van versie 21 en die heeft dat wel: de informatie ligt in 18 bits (blokjes), zowel boven de linkeronderhoek als links van de rechterbovenhoek (zie diagram verderop). De informatie zelf gebruikt maar 6 bits: de overige 12 zijn voor foutcorrectie.
Het format bepaalt welk foutcorrectie niveau gebruikt wordt en welk masking-patroon er is toegepast. Net als de versie-informatie ligt de format-informatie om de vierkanten in de hoeken heen, bestaat ze grotendeels uit foutcorrectie en is ze twee keer aanwezig in de code.
In deze afbeelding is weergegeven waar de versie-informatie ligt en waar je gemakkelijk het foutcorrectieniveau kunt aflezen, inclusief een tabel daarover.
Foutcorrectie
Ik heb het al verschillende keren genoemd maar nog niet uitgelegd: QR-codes maken gebruik van foutcorrectie. Samen met de werkelijke informatie worden er ook bits opgeslagen die dienen om te checken of de informatie wel goed gelezen is en die als dat niet het geval is zo mogelijk te herstellen. Hiervoor wordt de Reed-Solomoncode gebruikt. Het hangt van het hierboven aangegeven niveau af hoeveel bits er nodig zijn voor de foutcorrectie en dus hoe veel groter de QR-code ervan wordt.
In een online omgeving is het over het algemeen niet nodig om een hoger niveau dan L te gebruiken. In de originele toepassing, in de auto-industrie, was dat echter wel verstandig: als een QR-code op een onderdeel licht verroest of beschadigd was moest het nog steeds af te leiden zijn welk onderdeel het precies was. Tegenwoordig wordt het vaak voor leukere dingen gebruikt: als je niveau H gebruikt kun je het logo van je bedrijf over de code heen gooien zonder dat die er onleesbaar van wordt.
Masking
Nog even kort over masking: om ongewenste patronen te voorkomen (bijvoorbeeld een groot oppervlak van dezelfde kleur of een stuk dat lijkt op een hoekvierkant) zijn er 8 patronen die kunnen worden toegepast op de informatie en foutcorrectie, en die bepaalde bits omdraaien (bijvoorbeeld alle bits waarbij kolom modulo 3 = 0). Het resultaat met de minste ongewenstheden wordt gekozen.
Als je dit nog niet genoeg vond en het verlangen hebt je echt te verliezen in QR-codes, kun je hier een volledige zelfstudie vinden.
Dit artikel is geschreven door mij als schrijver bij de AiAiAi, het studieblad van studievereniging U.S.C.K.I. Incognito.