Hoe Werken QR Codes? Een Technische Uitleg

QR-codes zijn alomtegenwoordig, maar hoe slagen ze erin om zoveel informatie te bevatten en zo snel gescand te worden? In dit artikel duiken we dieper in de techniek achter de Quick Response code, zonder te verzanden in de allerdiepste wiskundige details.

Anatomie van een QR-code

Een QR-code is meer dan een willekeurig patroon van zwarte en witte vierkantjes (modules). De structuur is gestandaardiseerd en bestaat uit verschillende componenten:

  • Positioneringspatronen: De drie grote vierkanten in de hoeken van de QR-code. Deze stellen een scanner in staat om de code te herkennen en de oriëntatie te bepalen, zelfs als deze ondersteboven of schuin wordt gescand.
  • Uitlijningspatroon: Een kleiner vierkant, aanwezig in grotere QR-codes, dat helpt om de coördinaten van het datagrid te corrigeren bij vervorming.
  • Timingpatronen: Een L-vormige lijn van afwisselend zwarte en witte modules tussen de positioneringspatronen. Deze patronen definiëren de grootte van de modules en de versie van de QR-code.
  • Formaatinformatie: Een klein gebied nabij de positioneringspatronen dat informatie bevat over het foutcorrectieniveau en het gebruikte maskeringspatroon.
  • Data- en Foutcorrectiegebieden: De rest van de QR-code wordt gebruikt voor het opslaan van de data en de foutcorrectiecodes.

Dataopslag en Codering

De informatie in een QR-code wordt binair opgeslagen. Afhankelijk van het type data (numeriek, alfanumeriek, binair, of kanji) wordt een specifieke coderingsmodus gekozen voor optimale efficiëntie. Een URL wordt bijvoorbeeld anders gecodeerd dan een reeks cijfers.

De gekozen data wordt vervolgens omgezet in een bitstroom, die wordt opgedeeld in blokken van 8 bits (codewords). Deze codewords worden in het datagebied van de QR-code geplaatst.

Foutcorrectie: De Magie van Reed-Solomon

Een van de krachtigste eigenschappen van QR-codes is de foutcorrectie. Zelfs als een deel van de code beschadigd of bedekt is (tot 30%), kan de informatie nog steeds correct worden gelezen. Dit wordt mogelijk gemaakt door het Reed-Solomon-algoritme.

Tijdens het genereren van de QR-code worden extra foutcorrectie-codewords berekend en toegevoegd aan de datastroom. Als een scanner de QR-code leest en fouten detecteert, kan het deze extra data gebruiken als een soort wiskundige 'puzzel' om de ontbrekende of beschadigde informatie te reconstrueren. Er zijn vier niveaus van foutcorrectie:

  • Level L (Low): Kan tot 7% van de data herstellen.
  • Level M (Medium): Kan tot 15% van de data herstellen.
  • Level Q (Quartile): Kan tot 25% van de data herstellen.
  • Level H (High): Kan tot 30% van de data herstellen.

Een hoger foutcorrectieniveau betekent meer redundante data en dus minder opslagcapaciteit voor de daadwerkelijke informatie, maar een robuustere QR-code.

Maskering

Om te voorkomen dat er grote, ononderbroken blokken van dezelfde kleur ontstaan (wat een scanner kan verwarren), wordt er een 'masker' over de data gelegd. Dit is een vooraf gedefinieerd patroon dat de data 'verstoort' door bepaalde modules om te keren (van zwart naar wit of andersom) via een XOR-operatie. De formaatinformatie vertelt de scanner welk van de acht mogelijke maskers is gebruikt, zodat het proces kan worden omgekeerd.

Conclusie

Een QR-code is een ingenieus staaltje techniek, waarin datastructuur, efficiënte codering en robuuste foutcorrectie samenkomen. Door deze combinatie kan een kleine afbeelding een verrassend grote hoeveelheid data betrouwbaar overdragen. De volgende keer dat u een QR-code scant, weet u welke slimme processen zich op de achtergrond afspelen.