De zebracode (barcode, streepjescode) bestaat vijftig jaar, en dat is best lang voor een technologische toepassing. Het is dan ook bijna afgelopen met de streepjescode, want de QR-code (blokjescode) heeft inmiddels zijn intrede gedaan, en zal de streepjescode volledig verdringen.
Maar voordat we die zebracodes helemaal vergeten zijn, vertelt dit artikeltje over hoe ze werken en waarom ze zo handig zijn.Oormerken
Barcodes kom je overal tegen: Op sokken, medicijnen, boeken, viltstiften, postpakketten, klantenkaarten of pakken melk.
De idee achter de streepjescode is om een systeem te hebben, waarbij aan ieder artikel een slim nummer wordt toegekend, dat vervolgens razendsnel kan worden uitgelezen en naar een computer kan worden gestuurd, zodat een Albert Hein onmiddellijk weet waar zijn product is, hoeveel het moet kosten, hoeveel het weegt en het “product” op de kassa kan zetten. Wat het oormerk van koeien is, is de zebracode voor miljoenen artikelen die over de wereld zijn uitgestort.
Uitlezen
In de figuur zie je een voorbeeld van een Barcode die op een pak Arla melk zit.
Zebracode op een pak melk
Met een scanner (rode laser, smartphone) kan deze code worden omgezet in een digitaal signaal. We zien dat de code zich in een wit veld bevindt, en bestaat uit diverse witte en zwarte strepen, waarbij vier verschillende diktes te onderscheiden zijn. Een zwart streepje met een dikte van één noem ik Z en van dikte twee noem ik ZZ. Voor de witte strepen (W) geldt hetzelfde. Kijk mee vanaf links:
Witveld-Z-W-Z-W-ZZZ-W-ZZ-W-ZZ etc. etc. Het ziet er misschien ingewikkeld uit, maar geloof me, als je een Compact-Disk kunt uitlezen met putjes van een duizendste millimeter, dan is zo’n lompe streepjescode een fluitje van een cent voor zo’n scanner. Het aardige van de streepjescode is ook, dat de oplossing van de code er gewoon onder staat. In dit geval een reeks van dertien cijfers, waarbij het cijfer 7 staat voor W-ZZZ-W-ZZ. Mocht het scannen niet lukken, dan kan de kassière altijd nog de cijfers met de hand intikken. Maar het gaat er natuurlijk om, dat die dertien cijfers zo snel als mogelijk in een computer verdwijnen. Omdat mijn klantenkaart ook zo’n barcode bevat, wordt mijn persoon ook door AH geoormerkt en wordt mijn koopgedrag in kaart gebracht voor alle producten die ik heb gescand.
Het moet wel kloppen
Je wilt dat zo’n code natuurlijk fatsoenlijk wordt uitgelezen. Vergissen is menselijk, maar ook algoritmes kunnen er wat van. Daarom wordt er aan de code een extra cijfer (het meest rechtse) toegevoegd. Dit heet het controlecijfer, dat in ons voorbeeld gelijk aan 1 is. Dat cijfer krijg je als volgt: vermenigvuldig de eerste twaalf cijfers om en om met 1 en 3, tel ze op en vul het laatste (dertiende) controlecijfer zodanig aan, dat het geheel deelbaar wordt door 10. Een mond vol, maar als je het ziet gebeuren, is het eenvoudig. In ons voorbeeld:
(1x8) + (3x7) +(1x 1) + (3x8) ……….. + (3x5) = 99
Je hebt een extra 1 nodig om de som deelbaar door tien te krijgen. Die “gewogen” som wordt dus 100. Het nut van deze exercitie is, dat wanneer een cijfer fout wordt ingelezen, de gewogen som niet meer door tien deelbaar is. Ook wanneer je een cijfer verwisselt (dat zal de kassière zeker wel eens doen), zal de code als fout worden gedetecteerd. Je kunt het natuurlijk niet hebben dat een pak melk als een paar sokken op je bon komt.
We zien hier een simpel voorbeeld van een foutendetectie algoritme, dat in de digitale wereld overal voorkomt: bankpasjes, ISBN-nummers, Burger Service Nummer, maar ook bij de digitale geluid- en beelddragers, waarbij die code-algoritmes zo geavanceerd zijn, dat niet te grote fouten worden gecorrigeerd.
Wat stelt het voor
We keren weer terug naar het melkpakplaatje, we onderscheiden een linker- en een rechtergebied met cijfers. De linkercijfers: 8718166 vertellen iets over het land (de eerste drie cijfers) en de fabrikant van het product. Zo heeft Nederland de getallen 870 t/m 879 toegekend gekregen. Dat toekennen gebeurt door de instantie Global Standard One (GS1), die ook in Nederland zit. Zo is de cijferreeks 8166 toegekend aan “Arla Foods B.V.”.
Aan de rechterzijde van de melkpakcode vinden we 01115, en dat is code van het product dat de fabrikant zelf toekent aan zijn halfvolle melk. Het allerlaatste cijfer rechts, de 1, is het controlecijfer, waarmee de code robuuster wordt gemaakt. Alle codes zijn dus netjes geregistreerd, en worden in een groot “digitaal” boek bijgehouden, net zoals dat gebeurt bij het toekennen van internet domeinen.
Startschot en de meent
In de code staan uiterst links en rechts (en in het midden) drie paar dezelfde doorgetrokken lijnenpatronen (W-Z-W-Z-W), ze zijn het startschot en het eindsignaal voor de scanner, je wilt als scanner nou eenmaal graag weten wanneer iets begint en wanneer iets ophoudt. Hetzelfde patroon in het midden zegt de scanner dat ie “goed bezig is” en dat verhoogt de betrouwbaarheid.
Het kan nog erger
Barcodes en QR-codes zijn aan de buitenkant zichtbare kenmerken, die alleen op mijn eigen commando kunnen worden uitgelezen door ze bij een scanner te houden. Maar realiseer je dat je ook onzichtbare codes met je meedraagt bijvoorbeeld in de vorm van een NFC-chip (Near Field Communication). Die dingen zitten werkelijk overal in: OV-chip, paspoort, rijbewijs, bankpassen, creditcards, smartphone, smartwatch, trackers. En ik maak me geen enkele illusie dat al mijn gegevens geheim zijn te houden. Zo weet NS precies hoe en waar ik gereisd heb, zo weet mijn bank precies voor hoeveel en waar ik iets gekocht heb, weet Uncle Sam exact wanneer en waar ik zijn land heb betreden en mijn zorgverleners zullen mijn bloeddruk, mijn medicijngebruik en mijn gewicht kunnen inzien. De één vindt dat een veilige gedachte en de ander juist niet.
De schrijver is natuurkundige en heeft zijn werkzame leven met lasers gewerkt die onder meer bestemd waren voor de scanindustrie.
Bronnen: De GS1 site, alles over barcodes op Wikipedia, en de EAN13 code.
Tekening: Joop van Eck.