Qu’est-ce qu’un lecteur QR ?
Un QR code est un code-barres matriciel bidimensionnel défini par la norme ISO/IEC 18004. Il encode du texte, des URL, des cartes de contact, des identifiants Wi-Fi et d’autres contenus courts sous forme de grille de modules carrés noir et blanc, avec des données de correction d’erreurs Reed-Solomon pour que le symbole se décode même après une détérioration partielle ou un logo superposé. Un lecteur QR fait l’inverse : il prend l’image d’un symbole QR et récupère la chaîne de charge utile originale. Ce lecteur exécute le pipeline de décodage directement dans votre navigateur grâce à la bibliothèque open-source jsQR (environ 130 Ko, licence MIT). L’image que vous déposez, collez ou scannez avec la caméra ne quitte jamais l’onglet. Il n’y a pas d’étape d’envoi. Ouvrez DevTools pendant que vous décodez et le panneau Réseau reste silencieux — la page n’effectue ni XHR, ni fetch, ni balise analytique liée au contenu de votre image.
Comment fonctionne le décodage QR ?
Le décodage s’exécute entièrement sur votre machine. Chaque image passe par un pipeline fixe avant que le texte de la charge utile soit retourné :
- Le fichier image (PNG, JPG, WebP ou une image de caméra) est dessiné sur un
<canvas>HTML hors écran. L’API canvas retourne les données brutes des pixels sous forme de tableau d’octets RGBA. - La bibliothèque jsQR convertit le tableau de pixels en bitmap en niveaux de gris et recherche les trois carrés distinctifs de motifs de repère dans les coins d’un symbole QR.
- Une fois les motifs de repère localisés, le décodeur calcule la transformation de perspective et extrait la grille de modules complète, lisant chaque cellule comme un 0 ou 1 binaire.
- La grille de modules est analysée selon les spécifications QR : les informations de format et de version sont lues en premier, puis les modules de données sont désinterlacés et la correction d’erreurs Reed-Solomon est appliquée.
- Les mots de code de données corrigés sont décodés selon le mode de segment (numérique, alphanumérique, octet ou kanji), produisant la chaîne de charge utile originale.
- Cet outil analyse ensuite la charge utile avec un petit ensemble d’expressions régulières pour identifier le type de contenu (URL, identifiants Wi-Fi, vCard, etc.) et affiche le résultat avec un bouton d’action approprié.
Pourquoi utiliser un lecteur QR basé sur le navigateur ?
- Les octets de l’image ne quittent jamais votre appareil. Collez un QR qui cache un mot de passe Wi-Fi, une URL de staging interne, ou un vCard avec le numéro personnel de quelqu’un, et ce contenu reste sur votre ordinateur. D’autres lecteurs QR exécutent le décodage sur un serveur distant et vous demandent d’envoyer l’image d’abord — celui-ci ne le fait pas.
- Une fois la page chargée, le décodage fonctionne hors ligne. La bibliothèque jsQR vit dans votre onglet. Vous pouvez couper le Wi-Fi, déposer une image QR sur la page, et toujours obtenir la charge utile en retour — utile dans les avions, les sous-sols, et partout où le réseau d’entreprise bloque les scanners tiers.
- Si votre ordinateur dispose d’une webcam, vous pouvez la pointer sur un QR code imprimé et le lire sans installer d’application ni déverrouiller un téléphone. Le flux de la caméra reste dans le navigateur et s’arrête dès qu’un code est décodé.
- Le lecteur reconnaît les URL, les chaînes de connexion Wi-Fi, les vCard, MeCard, mailto, SMS et les charges utiles géo, et affiche un bouton d’action correspondant. Ouvrez une URL, copiez le mot de passe Wi-Fi, enregistrez la carte de contact — selon ce que le QR contient vraiment.
Usages courants d’un lecteur QR
À chaque fois que vous devez voir ce qu’un QR code contient vraiment sans pointer votre téléphone dessus :
- Déboguer des codes que vous venez de générer. Collez le QR produit par votre application (ou prenez une capture d’écran depuis le générateur QR adjacent) et confirmez que l’URL ou la charge utile encodée correspond à ce que vous avez prévu avant de l’envoyer à l’impression, à l’emballage ou à une affiche.
- Récupérer des identifiants Wi-Fi. Scannez le QR Wi-Fi depuis la page de config d’un routeur, une carte de bienvenue d’hôtel ou une photo d’annonce Airbnb, et le lecteur retourne le SSID, le type de sécurité et le mot de passe en texte brut que vous pouvez copier sur un autre appareil.
- Audit et accessibilité. Décodez les QR codes sur des documents numérisés, des étiquettes produits, des badges de conférence ou des captures d’écran de publications sur les réseaux sociaux pour extraire leur contenu dans un tableur, un journal de conformité ou un logiciel d’assistance — pratique quand l’URL de destination est la revendication réelle à auditer.
À quoi ressemble le décodage d’un vrai QR code ?
Prenons un QR code Wi-Fi imprimé sur la vitrine d’un café. Derrière le symbole, la charge utile brute suit le schéma d’URI WIFI: : WIFI:S:CafeGuest;T:WPA;P:espresso2026;H:false;;. Photographiez le symbole, déposez l’image dans la zone de dépôt ci-dessus, et le pipeline s’active : le canvas lit les pixels, jsQR localise les trois motifs de repère en coin, la transformation de perspective redresse la grille, Reed-Solomon répare tout reflet ou dommage de compression, et le segment en mode octet produit la chaîne URI. Le lecteur détecte alors le préfixe WIFI: et étiquette le type comme Wi-Fi, analyse le nom réseau comme CafeGuest, le type de sécurité comme WPA, et le mot de passe comme espresso2026. Un bouton Copier place le mot de passe dans votre presse-papiers pour le coller dans le sélecteur réseau de votre OS. Pour un QR URL contenant https://tools.ultim8soft.com, le même pipeline retourne le badge de type URL et un bouton Ouvrir qui navigue vers la cible dans un nouvel onglet. Dans les deux cas, la seule chose qui s’est passée sur le réseau était le chargement de la page elle-même — le décodage est local.
Ce lecteur QR a été conçu pour une seule tâche : vous montrer exactement ce qu’un QR code contient, dans votre navigateur, sans serveur intermédiaire. Déposez une image, collez depuis le presse-papiers, ou laissez la webcam fonctionner, et le contenu décodé ainsi que son type apparaissent à l’écran en moins d’une seconde. Les octets de l’image ne sont pas envoyés. Les images de la caméra ne sont pas enregistrées. La charge utile décodée ne transite pas par les journaux de quelqu’un d’autre avant de vous revenir. Associez-le au générateur QR adjacent quand vous avez besoin d’une confirmation aller-retour que ce que vous avez encodé est ce qu’un autre verra.
L’image est-elle envoyée à un serveur ?
Non. L’image est dessinée sur un canvas HTML en mémoire et décodée entièrement par du JavaScript côté client s’exécutant dans votre onglet. Aucun pixel de votre image n’est jamais envoyé à un serveur, journalisé ou stocké. Vous pouvez le confirmer en ouvrant DevTools et en regardant le panneau Réseau pendant que vous déposez une image : aucun XHR, aucun fetch, aucune balise analytique liée au contenu du fichier.
Comment fonctionne le scan par caméra ?
Lorsque vous activez le mode caméra, le navigateur demande l’autorisation d’accéder à votre caméra via l’API standard getUserMedia. Les images vidéo sont capturées dans un canvas hors écran à une résolution maximale de 640×480 et transmises à jsQR pour décodage. Chaque image est supprimée dès que la suivante arrive, et le flux caméra est arrêté au premier décodage réussi. Aucune image n’est enregistrée, aucune n’est transmise, et la demande d’autorisation ne se déclenche que lorsque vous activez le commutateur — pas au chargement de la page.
Pourquoi certains contenus QR sont-ils détectés automatiquement comme Wi-Fi ou vCard ?
Les charges utiles QR pour les identifiants Wi-Fi suivent le format WIFI:S:ssid;T:type;P:password;;, et les vCards commencent par BEGIN:VCARD. Ce lecteur reconnaît ces motifs ainsi que d’autres préfixes standard (mailto:, geo:, smsto:, MECARD:, https://) et étiquette le type de contenu automatiquement pour que le bouton d’action corresponde à ce que vous voudriez faire avec la charge utile.
Pourquoi mon QR code n’a-t-il pas été scanné ?
Causes courantes : l’image est trop petite ou de faible résolution (~100×100 px est le minimum, 300×300 et plus scanne de façon fiable), le symbole est très endommagé ou partiellement masqué par un logo sans suffisamment de correction d’erreurs, la zone de tranquillité (la bordure blanche autour des modules) est absente ou rognée, ou le contraste entre les modules sombres et clairs est trop faible. En mode caméra, améliorez l’éclairage ou rapprochez le code de l’objectif — jsQR doit résoudre clairement les modules individuels pour verrouiller sur les motifs de repère.