Hvordan virker en QR-kode egentlig? Teknikken bag pixelmosaikken
En hurtig scanning med smartphonekameraet er alt, der skal til – og en hjemmeside åbner, wifi'et forbinder, eller et vCard bliver gemt i adressebogen. Det, der i hverdagen virker som magi, er i virkeligheden en yderst gennemtænkt kombination af datalogi, matematik og optik.
Men hvordan bliver en lang webadresse eller et stykke tekst egentlig til det karakteristiske sort-hvide mønster? Hvor gemmer dataene sig i koden, og hvorfor genkender kameraet indholdet, selv når QR-koden er skæv eller let beskadiget?
I denne artikel gennemgår vi trin for trin, hvordan Quick Response-koden (QR) virker.
1. Grundprincippet er enkelt: Tegn bliver til nuller og ettaller.
Computere taler binært, det vil sige, de forstår kun 0 og 1. Før information kan vises som mønster i QR-koden, skal den derfor først omsættes til bits. For at spare plads bruger QR-softwaren forskellige kodningstilstande:
- Numerisk tilstand: Kun til tal (0–9). Meget effektiv, da tre cifre samles i ti bits.
- Alfanumerisk tilstand: Til cifre, store bogstaver og udvalgte specialtegn.
- Byte-tilstand: Til almindelig tekst, små bogstaver, specialbogstaver som æ, ø og å (UTF-8) og URL'er.
- Kanji-tilstand: Særligt komprimeret til japanske tegn.
Et kig bag kulisserne viser, hvordan »QR« bliver til binær kode.
For at forstå, hvor pladsbesparende en QR-kode er, ser vi på den alfanumeriske tilstand. Her får hvert tegn en fast talværdi (A = 10, B = 11, ..., Q = 26, R = 27).
For ikke at skulle gemme hvert bogstav for sig, samler algoritmen altid to tegn.
- Værdierne for Q (26) og R (27) regnes sammen: $26 \times 45 + 27 = 1197$.
- Tallet 1197 skrives som et 11-bit binært tal:
10010101101.
De to bogstaver QR giver altså præcis 11 bits af nuller og ettaller. Står der et enkelt bogstav tilbage til sidst i en tegnstreng, kodes det med 6 bits (f.eks. $Q \rightarrow 26 \rightarrow 011010$).
2. Vejen fra binær kode til det færdige mønster
Når din tekst er oversat til en række nuller og ettaller, gennemgår den flere tekniske behandlingstrin:
Trin A: Ekstra tekniske data og fejlkorrektion
Rækken af nuller og ettaller med dit indhold er ikke den eneste del af koden. Foran nyttedataene placeres en header. Den fortæller scanneren: »Pas på, her kommer en tekst i byte-tilstand med en længde på 25 tegn!«
Derefter beregner en matematisk proces – den såkaldte Reed-Solomon-fejlkorrektion – ekstra paritetsbits. De sikrer, at koden stadig kan læses, selv hvis op til omkring 30 % af dataene (niveau H) er dækket til eller beskadiget (f.eks. af et firmalogo i midten).
Trin B: Fordeling i gitteret (moduler)
De enkelte firkanter i QR-koden kaldes moduler. Som hovedregel gælder:
- 0 = hvidt modul
- 1 = sort modul
Bittene skrives dog ikke bare ind linje for linje fra øverst til venstre til nederst til højre. Datakodningen begynder i nederste højre hjørne og snor sig gennem gitteret i smalle kolonner på to, skiftevis opad og nedad. Reserverede funktionsområder (som hjørnerne) springes automatisk over.
Derfor kan du aldrig pege på en enkelt sort firkant i den færdige QR-kode og sige: »Det her er ›h'et‹ i webadressen.«
Trin C: Maskeringstricket (hvorfor 1 ikke altid er sort)
Hvis bittene blev tegnet direkte, kunne der tilfældigt opstå store sorte blokke, lange hvide striber eller vildledende mønstre, der forvirrer kameraet.
Derfor lægger softwaren et maskeringsmønster over matrixen. Der findes i alt otte standardiserede masker. Med en matematisk XOR-operation vender masken bestemte bits om:
- 0 bliver til 1 (hvid bliver sort)
- 1 bliver til 0 (sort bliver hvid)
Scanneren aflæser ud fra formatinformationen ved siden af hjørnefirkanterne, hvilken maske der er brugt, og fortryder dette trin på en brøkdel af et sekund under afkodningen.
3. En QR-kodes anatomi: Hvad betyder de enkelte mønstre?
Ser du nærmere på en QR-kode, ligner den en tilfældig mosaik. I virkeligheden er hvert eneste element placeret strengt efter ISO-standarden. Du kan forestille dig opbygningen som et ansigts anatomi. Bestemte kendetegn sidder altid samme sted, så en smartphone kan genkende koden med det samme.
En klassisk QR-kode er opdelt i følgende hovedzoner:
1. De tre store hjørnefirkanter (positionsmarkører/finder patterns)
- De sidder øverst til venstre, øverst til højre og nederst til venstre.
- Det gør de: De er QR-kodens mest iøjnefaldende kendetegn. De tre ankerpunkter signalerer straks til kameraet: »Pas på, her er en QR-kode!« De fortæller øjeblikkeligt softwaren position, størrelse og hældningsvinkel, så kameraet kan se, om smartphonen holdes lige eller skævt.
2. De stiplede forbindelseslinjer (timing patterns)
- De løber mellem de tre hjørnefirkanter – vandret mellem øverst til venstre og øverst til højre, lodret mellem øverst til venstre og nederst til venstre. De definerer gitteret (modulstørrelsen); orienteringen kommer fra de tre hjørnefirkanter.
- Det gør de: Linjerne består af skiftevis sorte og hvide moduler. De fungerer som en lineal for scanneren: Ud fra disse punkter beregner softwaren gitterets størrelse (fra version 1 med 21 × 21 celler til version 40 med 177 × 177 celler).
3. De små indre firkanter (alignment patterns)
- De sidder i det nederste højre område og er i komplekse koder fordelt over hele mønsteret.
- Det gør de: De mindre firkanter fungerer som digitale trådkors. De hjælper scanneren med at udligne forvrængninger, for eksempel når QR-koden er trykt på en buet sodavandsdåse, eller flyeren er krøllet.
4. Kontrolzonen (formatinformation)
- Den ligger direkte op ad de tre store hjørnefirkanter.
- Det gør den: Her ligger de tekniske instruktioner til scanneren. I de få pixels er to afgørende oplysninger kodet: 1. hvilket fejlkorrektionsniveau (L, M, Q eller H) der bruges, og hvilket maskeringsmønster der er lagt over dataene.
5. Den usynlige beskyttelseskant (quiet zone)
- Det er den helt hvide, utrykte kant rundt om hele QR-koden.
- Funktion: For at kameraet præcist kan fange kodens yderkanter, skal der være en sikkerhedsafstand til tekst, billeder eller baggrundsgrafik. Kanten skal være mindst fire moduler (pixelbredder) bred. Mangler quiet zone, nægter kameraet ofte at scanne.
4. Hvad sker der, når du scanner en QR-kode med din smartphone?
Når du retter kameraet mod en QR-kode, sker følgende i baggrunden:
- Søgning: Kameraet gennemsøger videobilledet efter de tre store finder patterns.
- Transformation: Softwaren beregner perspektivet og »retter« digitalt et billede ud, der måske er taget skævt.
- Afmaskering: Gittersystemet læser formatinformationen, genkender maskeringsmønsteret og fjerner masken.
- Fejlkorrektion: Ridser, uskarphed eller tildækninger rettes matematisk.
- Afkodning: Nullerne og ettallerne omsættes efter tilstandsreglerne tilbage til læsbar tekst, tal eller styrekommandoer.
- Handling: Smartphonen genkender datatypen (f.eks.
https://for en URL,WIFI:for adgangsoplysninger ellerBEGIN:VCARDfor kontakter) og foreslår den passende app.
Teknisk dybdedyk: de vigtigste spørgsmål forklaret
Skal man have internetforbindelse for at scanne en QR-kode?
Nej, ikke til selve scanningen. Omsætningen fra pixels til tekst sker lokalt på din smartphone. Er indholdet ren tekst, et vCard eller wifi-adgangsoplysninger, virker alt helt offline. Kun når koden indeholder en webadresse (URL), og du vil åbne den, skal du bruge en dataforbindelse.
Er en QR-kode krypteret?
Nej. En QR-kode er kun kodet, ikke krypteret. Enhver almindelig QR-scanner kan læse dataene i den. Fortrolige oplysninger som adgangskoder, bankoplysninger eller personlige PIN-koder bør derfor aldrig gemmes ubeskyttet i en standard-QR-kode.
Hvorfor ser nogle QR-koder meget finere og tættere ud end andre?
Jo flere data der gemmes direkte i koden – for eksempel en lang tekst frem for et kort link – desto flere moduler kræves der. Koden skifter så til en højere version (fra version 1 med 21 × 21 moduler op til version 40 med 177 × 177 moduler).
Statisk vs. dynamisk: hvorfor dynamiske koder forbliver mere kompakte
- Statiske QR-koder: Gemmer slutdestinationen (f.eks. en URL på 150 tegn) direkte. Mønsteret bliver meget tæt og sværere at scanne.
- Dynamiske QR-koder: Gemmer kun et ultrakort omdirigeringslink (f.eks.
qron.ch/12da7). Koden forbliver visuelt meget enkel og nem at scanne, og den egentlige destination kan til enhver tid ændres på serveren, uden at koden skal trykkes igen.
Tjekliste til QR-koder, der virker
Når du opretter dine egne QR-koder eller får dem designet, så husk disse grundregler:
- Brug korte links: Brug dynamiske QR-koder for at holde modultætheden lav.
- Hold kontrasten: Vælg et mørkt mønster på lys baggrund (inverterede koder kan give problemer for nogle ældre kameraer).
- Respekter kantområdet: Hold en afstand på mindst 4 moduler til tekst, skærekanter eller grafik.
- Tilpas fejlkorrektionen: Et logo bruger af fejlkorrektionsreserven – jo større logo, desto højere bør niveauet være. Ved dynamiske koder sætter QRown selv niveauet og tjekker scanbarheden, når du har designet koden.
Ofte stillede spørgsmål (FAQ)
Hvor mange moduler består en QR-kode af?
De mindste QR-koder (version 1) består af 21 × 21 moduler, altså 441 celler. Den største version (version 40) har et gitter på 177 × 177 moduler, altså 31 329 celler.
Kan en QR-kode indeholde virus eller malware?
En QR-kode indeholder i sig selv kun tekst og kan ikke direkte køre skadelig programkode. Den kan dog føre til en manipuleret phishing-side eller en skadelig download. Tjek derfor altid domæneforhåndsvisningen på din smartphone, før du åbner den!
Hvilken tilstand sparer mest plads i en QR-kode?
Den mest effektive tilstand er den numeriske (kun tal), efterfulgt af den alfanumeriske. Byte-tilstanden (til almindelige URL'er og specialtegn) kræver derimod mest lagerplads pr. tegn.