§

Sleep afbeelding of klik om te kiezen

Sleep afbeelding of klik om te kiezen PNG, JPG, GIF, BMP, WebP — of plak vanuit klembord
§

Scannen met camera

Cameratoegang wordt alleen aangevraagd als deze schakelaar is ingeschakeld. Er wordt nooit iets geüpload of opgenomen.
§

Gedecodeerde inhoud

In Nederland en België bevatten QR-codes vaak gevoelige informatie. Denk aan de DigiD-inlogpagina die via een QR op een brief van de Belastingdienst of het UWV bereikbaar is, OV-chipkaartinformatie op instapbewijzen van NS en Connexxion, toegangsbewijzen voor festivals als Lowlands en Pinkpop, of de QR op apotheekzakjes van BENU en Etos. Iedere keer als je een desktopbrowser op zo’n symbool wilt richten in plaats van je telefoon, wil je weten wat erin staat vóórdat je erop klikt — controleer of de URL op een poster de echte organisatie is, herstel het Wi-Fi-wachtwoord dat je router als QR heeft afgedrukt, of lees de vCard die een congresdeelnemer wil delen. Deze lezer herkent alle formaten die die bronnen produceren: URL, Wi-Fi-verbindingsreeksen, vCard, MeCard, platte tekst, e-mail, SMS, geografische coördinaten. De afbeeldingsbytes en de gedecodeerde inhoud blijven in je tabblad.

Wat is een QR-codelezer?

Een QR-code is een tweedimensionale matrixstreepjescode gedefinieerd door ISO/IEC 18004. Hij codeert tekst, URL’s, contactkaarten, Wi-Fi-inloggegevens en andere korte inhoud als een raster van zwart-witte vierkante modules, samen met Reed-Solomon-foutcorrectiegegevens zodat het symbool ook bij gedeeltelijke schade of een logo-overlay nog leesbaar is. Een QR-codelezer doet het omgekeerde: hij neemt de afbeelding van een QR-symbool en herstelt de originele inhoudstekenreeks. Deze lezer voert de decodeerpijplijn rechtstreeks in je browser uit met behulp van de open-source jsQR-bibliotheek (circa 130 KB, MIT-licentie). De afbeelding die je sleept, plakt of scant met de camera verlaat het tabblad nooit. Er is geen uploadstap. Open DevTools terwijl je decodeert en het Netwerk-paneel blijft stil — de pagina doet geen XHR, geen fetch, geen analysebeacon gebonden aan je afbeeldingsinhoud.

Hoe werkt QR-decodering?

Decodering draait volledig op je machine. Elke afbeelding doorloopt een vaste pijplijn voordat de inhoudstekst wordt teruggegeven:

  1. Het afbeeldingsbestand (PNG, JPG, WebP of een cameraframe) wordt getekend op een offscreen HTML <canvas>. De canvas-API geeft ruwe pixelgegevens terug als een RGBA-byte-array.
  2. De jsQR-bibliotheek zet de pixel-array om naar een grijswaardenbitmap en scant naar de drie kenmerkende zoekpatroonvierkanten in de hoeken van een QR-symbool.
  3. Zodra de zoekpatronen zijn gevonden, berekent de decoder de perspectieftransformatie en extraheert hij het volledige moduleraster, waarbij elke cel wordt gelezen als een binaire 0 of 1.
  4. Het moduleraster wordt geparseerd volgens de QR-specificatie: formaat- en versie-informatie worden eerst gelezen, daarna worden de datamodules gedeinterlaced en wordt Reed-Solomon-foutcorrectie toegepast.
  5. De gecorrigeerde datacodewoorden worden gedecodeerd volgens de segmentmodus (numeriek, alfanumeriek, byte of kanji), wat de originele inhoudstekenreeks oplevert.
  6. De tool herkent vervolgens de inhoud met een kleine set reguliere expressies om het inhoudstype te bepalen (URL, Wi-Fi-inloggegevens, vCard, enzovoort) en toont het resultaat met een bijpassende actieknop.

Waarom een browsergebaseerde QR-lezer gebruiken?

  • De afbeeldingsbytes verlaten je apparaat nooit. Plak een QR die een Wi-Fi-wachtwoord, een interne staging-URL of een vCard met iemands persoonlijk telefoonnummer verbergt, en die inhoud blijft op je laptop. Andere QR-lezers voeren de decodering uit op een externe server en vragen je de afbeelding eerst te uploaden — deze tool niet.
  • Zodra de pagina is geladen, werkt decodering offline. De jsQR-bibliotheek leeft in je tabblad. Je kunt Wi-Fi verbreken, een QR-afbeelding op de pagina slepen en toch de inhoud terugkrijgen — handig in vliegtuigen, kelders en overal waar het bedrijfsnetwerk externe scanners blokkeert.
  • Als je desktopcomputer of laptop een webcam heeft, kun je hem op een gedrukte QR-code richten en die lezen zonder een app te installeren of een telefoon te ontgrendelen. De camerastream blijft in de browser en stopt zodra een code is gedecodeerd.
  • De lezer herkent URL’s, Wi-Fi-verbindingsreeksen, vCard, MeCard, mailto, SMS en geo-inhoud en toont een bijpassende actieknop. Open een URL, kopieer het Wi-Fi-wachtwoord, sla de contactkaart op — wat de QR ook bevat.

Veelvoorkomende toepassingen van een QR-codelezer

Elke keer dat je wilt weten wat een QR-code zegt zonder er een telefoon op te richten:

  • Codes debuggen die je net hebt gegenereerd. Plak de QR die je app heeft gemaakt (of maak een screenshot van de QR-codegenerator hiernaast) en bevestig dat de gecodeerde URL of inhoud klopt vóórdat je hem naar de drukkerij, verpakking of een poster stuurt.
  • Wi-Fi-inloggegevens herstellen. Scan de Wi-Fi-QR van een routerconfiguratiepagina, een hotelwelkomstkaart of een vakantieverhuurlijst en de lezer geeft de SSID, het beveiligingstype en het wachtwoord terug als platte tekst die je naar een ander apparaat kunt kopiëren.
  • Audits en toegankelijkheid. Decodeer QR-codes op gescande documenten, productetiketten, congresnaamplaatjes of screenshots van sociale berichten om hun inhoud te extraheren naar een spreadsheet, een compliance-log of ondersteunende software — handig wanneer de doel-URL de eigenlijke bewering is die wordt gecontroleerd.

Hoe ziet het decoderen van een echte QR-code eruit?

Neem een Wi-Fi-QR-code op het raam van een koffiebar. Achter het symbool volgt de ruwe inhoud het WIFI: URI-schema: WIFI:S:CafeGuest;T:WPA;P:espresso2026;H:false;;. Fotografeer het symbool, sleep de afbeelding naar de uploadzone hierboven en de pijplijn start: de canvas leest de pixels, jsQR lokaliseert de drie hoekzoekpatronen, de perspectieftransformatie rechtigt het raster, Reed-Solomon repareert eventuele weerschijn of compressieschade, en het byte-modesegment levert de URI-tekenreeks op. De lezer herkent dan het voorvoegsel WIFI: en labelt het type als Wi-Fi, parseert de netwerknaam als CafeGuest, het beveiligingstype als WPA en het wachtwoord als espresso2026. Een knop Kopiëren zet het wachtwoord op je klembord zodat je het in de netwerkkiezer van het besturingssysteem kunt plakken. Voor een gewone URL-QR met https://tools.ultim8soft.com geeft dezelfde pijplijn het label URL en een knop Openen die naar het doel navigeert in een nieuw tabblad. In beide gevallen is het enige dat over het netwerk ging de paginalading zelf — de decodering is lokaal.

Deze QR-codelezer is gebouwd voor één taak: je precies laten zien wat een QR-code codeert, in je browser, zonder server ertussen. Sleep een afbeelding, plak vanuit klembord of laat de webcam draaien, en de gedecodeerde inhoud plus het type verschijnen in minder dan een seconde op het scherm. De afbeeldingsbytes worden niet geüpload. De cameraframes worden niet opgenomen. De gedecodeerde inhoud gaat niet via andermans logs op weg terug naar jou. Combineer het met de QR-codegenerator hiernaast als je een round-trip-bevestiging wilt dat wat je hebt gecodeerd ook is wat iemand anders ziet.

Wordt de afbeelding naar een server geüpload?

Nee. De afbeelding wordt op een in-memory HTML-canvas getekend en volledig gedecodeerd door client-side JavaScript in je tabblad. Geen pixel van je afbeelding wordt ooit naar een server gestuurd, gelogd of opgeslagen. Je kunt dit bevestigen door DevTools te openen en het Netwerk-paneel te bekijken terwijl je een afbeelding sleept: er zijn geen XHR-, fetch- of analysebeacons gekoppeld aan de bestandsinhoud.

Hoe werkt scannen met de camera?

Als je de cameramodus inschakelt, vraagt de browser toestemming om toegang te krijgen tot je apparaatcamera via de standaard getUserMedia-API. Videoframes worden vastgelegd op een offscreen canvas met een resolutie van maximaal 640×480 en doorgegeven aan jsQR voor decodering. Elk frame wordt verwijderd zodra het volgende arriveert, en de camerastream wordt gestopt bij de eerste geslaagde decodering. Er worden geen frames opgenomen, geen frames verzonden, en de toestemmingsvraag verschijnt alleen als je de schakelaar inschakelt — niet bij het laden van de pagina.

Waarom wordt sommige QR-inhoud automatisch herkend als Wi-Fi of vCard?

QR-inhoud voor Wi-Fi-inloggegevens volgt het formaat WIFI:S:ssid;T:type;P:password;;, en vCards beginnen met BEGIN:VCARD. Deze lezer herkent die patronen samen met andere standaardprefixen (mailto:, geo:, smsto:, MECARD:, https://) en labelt het inhoudstype automatisch zodat de actieknop past bij wat je daadwerkelijk met de inhoud wilt doen.

Waarom is mijn QR-code niet gescand?

Veelvoorkomende oorzaken: de afbeelding is te klein of heeft een lage resolutie (~100×100 px is de ondergrens, 300×300+ scant betrouwbaar), het symbool is zwaar beschadigd of deels bedekt door een logo zonder voldoende foutcorrectie, de stille zone (de lege rand rondom de modules) ontbreekt of is bijgesneden, of het contrast tussen donkere en lichte modules is te laag. In cameramodus: verbeter de belichting of breng de code dichter bij de lens — jsQR moet individuele modules helder kunnen onderscheiden om de zoekpatronen te kunnen herkennen.