Comment fonctionne un QR code ? Explication simple et complète — featured illustration
Technologie

Comment fonctionne un QR code ? Explication simple et complète

6 min de lecture
Créer un QR code

Vous visez un carré posé sur une table de restaurant, et la carte s'affiche avant même que votre bras soit redescendu. Vous n'avez rien tapé, rien appairé, et le carré n'a rien envoyé. Il était juste là, dans un agencement bien précis de noir et de blanc, et votre appareil photo l'a lu comme vous liriez un mot imprimé.

Voici la chaîne entière, de l'encre à la page ouverte. Chaque maillon a plus de profondeur qu'une section ne peut en porter, et plusieurs ont leur propre parcours ailleurs.

Trois coins font d'abord le plus dur

Prenez n'importe quel QR code : trois carrés emboîtés identiques vous sautent aux yeux, en haut à gauche, en haut à droite et en bas à gauche. Ce sont les motifs de repérage, et ils règlent d'emblée deux questions. Y a-t-il un code dans cette image, et de quel côté se trouve le haut ?

Leurs proportions ont été choisies délibérément. Tracez une ligne à travers l'un d'eux dans n'importe quelle direction et la succession sombre-clair donne 1:1:3:1:1. Ce rapport est rare sur des photos de papier, d'emballages et de plateaux de table, donc un logiciel peut balayer une image de caméra en ne cherchant que cela. Trouvez-en trois, et vous avez trois coins d'un carré. Le quatrième coin vide indique au décodeur la rotation du code, ce qui explique qu'un code scotché de travers sur un lampadaire se scanne comme un code posé à plat.

Les codes plus grands ajoutent un motif d'alignement plus petit près du coin en bas à droite. Un code est rarement plat et bien en face d'un objectif : il est courbé autour d'une bouteille, incliné sur une table, pris de biais. Les motifs d'alignement fournissent des points de référence fixes pour que le décodeur redresse l'image en une grille propre.

Entre les motifs de repérage courent deux lignes pointillées, une horizontale et une verticale, alternant sombre et clair. Ce sont les motifs de synchronisation. Ils posent la règle graduée, en indiquant au décodeur la largeur d'une cellule.

La grille n'est que des bits

Retirez les coins et les lignes de synchronisation, et il reste un champ de petits carrés appelés modules. Sombre vaut un, clair vaut zéro. C'est tout le mécanisme de stockage.

Ces bits sont lus en zigzag, en partant du coin en bas à droite et en serpentant vers le haut par bandes de deux colonnes, puis en redescendant la paire suivante. Les premiers déclarent le mode d'encodage, car les QR codes tassent différemment selon le contenu : les chiffres se compriment plus que les lettres, et les lettres plus que des octets quelconques. Ensuite un compteur de longueur, puis la charge utile.

La charge utile est du texte. Toujours du texte. Un QR code ne contient pas un site web, une image ou un fichier. Il porte une courte chaîne, et votre téléphone décide quoi en faire selon la façon dont elle commence. Ce qui commence par https:// est confié à un navigateur. Ce qui commence par WIFI: est confié aux réglages réseau, et c'est tout ce qu'est vraiment un QR code Wi-Fi. Ce qui commence par BEGIN:VCARD part dans les contacts. Le motif lui-même est bête. Ce sont les conventions autour qui font le travail.

Pourquoi une trace de tasse ne le tue pas

Si la grille ne contenait que votre URL, un seul module bavé la casserait. Ce n'est pas le cas. Une part non négligeable des modules porte des données de correction d'erreurs Reed-Solomon, un rembourrage qui permet à un décodeur de reconstruire ce qu'il ne voit pas à partir de ce qui a survécu.

Vous choisissez la quantité de rembourrage à la génération. Il existe quatre niveaux, récupérant environ 7 %, 15 %, 25 % et 30 % du code :

  • Le niveau L, autour de 7 %, tasse le plus de données dans la plus petite grille. Très bien sur un écran.
  • Le niveau à 15 %, M, est le réglage courant et un choix raisonnable pour l'impression.
  • Q, à environ 25 %, achète de la marge pour des étiquettes manipulées ou exposées à la pluie.
  • Prenez H, près de 30 %, quand quelque chose viendra se poser sur le code.

Ce dernier cas explique pourquoi un logo au milieu d'un QR code fonctionne. Le logo ne fait pas partie des données. Il recouvre des modules, et la correction d'erreurs les reconstruit discrètement. Recouvrez plus que ce que le niveau autorise et le code meurt, ce qui est la façon dont un logo qui grossit à chaque révision tue une maquette qui se scannait très bien la semaine dernière.

Une autre astuce est intégrée : le masquage. Les données brutes produisent parfois de grandes plages vides ou des copies accidentelles du motif de repérage, deux choses qui perturbent les scanners. L'encodeur applique donc un XOR entre la grille et chacun de huit motifs standard et garde celui qui ressort le plus uniformément mélangé. Deux courtes bandes d'information de format, à côté des motifs de repérage, consignent le masque et le niveau de correction employés, pour que le décodeur puisse défaire l'opération.

Les grands codes ne sont pas simplement agrandis

Les QR codes existent en versions numérotées de 1 à 40. La version 1 est une grille de 21 sur 21. Chaque cran ajoute quatre modules par côté, la version 40 atterrit donc à 177 sur 177. Plus de contenu veut dire une version plus élevée, et plus de modules entassés dans le même carré physique.

Cela compte à l'impression plus qu'on ne le croit. Un code version 3 et un code version 25 sur la même carte de visite paraissent de même taille à l'œil, mais le second a des modules d'une fraction de la largeur. Une imprimerie bon marché les bave, et un téléphone à bout de bras ne peut pas les résoudre. Raccourcir l'URL encodée est souvent le remède le moins cher pour un code qui ne se lit pas. Le guide des tailles contient le calcul distance-taille.

La marge blanche fait aussi partie de la spécification, ce n'est pas de la décoration. Elle s'appelle zone de silence et court sur environ quatre modules de large de chaque côté. Les codes collés contre un aplat de couleur ou un bord de page échouent constamment pour cette seule raison.

Ce qui se passe après la caméra

Le décodage prend une fraction de seconde et tourne entièrement sur l'appareil. En gros : passer l'image en noir et blanc, chercher le rapport 1:1:3:1:1, verrouiller trois repères, échantillonner chaque module, lire les bits de format, retirer le masque, exécuter la correction d'erreurs, réassembler les octets, produire une chaîne.

Ce n'est qu'ensuite qu'il se passe quelque chose de visible. Votre téléphone vous montre la chaîne, ou un aperçu, et attend une pression. Cette pause est toute la couche de sécurité, car l'étape de scan traite un autocollant que quelqu'un a collé sur un horodateur aussi fidèlement que le vrai code en dessous.

Si la chaîne est un lien, la pression ouvre un navigateur et le web ordinaire prend le relais. Un code statique vous envoie directement à l'adresse tapée par son créateur. Un code dynamique vous envoie d'abord vers une courte redirection, qui enregistre le scan et vous fait suivre. Ce saut supplémentaire est la seule raison pour laquelle les codes dynamiques peuvent être modifiés et comptés après impression. Les carrés ne changent jamais. Ce qui attend au bout de la redirection, si.

Et en France ?

Le vocabulaire du QR code vient de l'anglais, et les documents techniques mélangent souvent les deux langues. Petit lexique pour s'y retrouver :

Terme françaisÉquivalent anglaisCe que c'est
ModuleModuleChaque petit carré noir ou blanc
Repère de positionnementFinder patternLes trois grands carrés d'angle
Zone de silenceQuiet zoneLa marge blanche autour du code
Correction d'erreursError correctionLes données de secours qui réparent un code abîmé
Code dynamiqueDynamic QR codeUn code qui encode une redirection modifiable

Avec ces cinq mots, vous pouvez lire la plupart des guides techniques, en français comme en anglais.

Là où ça déraille vraiment

Presque tous les échecs viennent du support physique, pas des mathématiques : un contraste trop faible entre les modules et le fond, un code inversé, clair sur fond foncé, que beaucoup de lecteurs refusent, une zone de silence absente, une encre qui s'étale au point de souder les modules, un reflet sur un chevalet plastifié, ou un code imprimé deux fois trop petit pour sa distance de lecture.

Si vous en avez un qui a cessé de fonctionner, commencez par le contraste et la marge avant toute autre chose. Ces deux-là expliquent l'essentiel, et l'ordre de diagnostic à partir de là prend environ cinq minutes.

Partager cet article