Aller au contenu

BlogDonnées5 min de lecture

Correction d’erreur et taille des QR codes : L, M, Q et H testés

Une correction d’erreur plus forte permet à un QR code de survivre aux dégâts, mais le rend aussi plus dense. Nous avons généré des codes pour quatre contenus courants à chaque niveau et les avons couverts petit à petit jusqu’à ce qu’ils ne se lisent plus.

Un QR code avec un logo au centre, lu par un téléphone, et les niveaux L, M, Q et H.

Tout générateur de QR code demande un niveau de correction d’erreur : L, M, Q ou H. L’explication habituelle est qu’un niveau plus élevé permet au code de supporter plus de dégâts. C’est vrai, mais cela a un coût rarement mentionné, et la tolérance réelle est plus faible que les chiffres généralement cités. Nous avons généré des codes pour quatre types de contenu courants à chaque niveau, puis les avons masqués petit à petit jusqu’à ce que notre lecteur ne puisse plus les lire.

Ce que fait la correction d’erreur

Un QR code stocke son contenu sous forme d’une suite d’octets, appelés mots de code, et y ajoute des mots de code supplémentaires calculés à partir d’eux avec le codage de Reed-Solomon, la même technique que sur les CD. Si certains mots de code sont abîmés, les mots supplémentaires permettent au lecteur de les reconstruire. Les quatre niveaux fixent la part du code consacrée à cela :

NiveauMots de code récupérablesConseil habituel
L (bas)Environ 7 %Écrans et documents propres
M (moyen)Environ 15 %Le choix par défaut courant
Q (quartile)Environ 25 %Impression, extérieur, logos
H (haut)Environ 30 %Conditions difficiles, grands logos
Les pourcentages sont ceux de la norme QR code.

Les mots de code supplémentaires occupent une place qui contiendrait sinon du contenu. Pour un même contenu, un niveau plus élevé demande une grille de carrés (appelés modules) plus grande.

De combien le code grandit

Quatre QR codes pour le même lien côte à côte, aux niveaux de correction d’erreur L, M, Q et H. La grille passe de 37 sur 37 carrés au niveau L à 53 sur 53 au niveau H : les carrés deviennent plus petits et plus serrés.
Le même lien de 89 caractères aux quatre niveaux. Imprimés à la même largeur, les carrés du code H sont 30 % plus petits que ceux du code L.
ContenuCaractèresLMQH
Lien court1925 × 2525 × 2525 × 2529 × 29
Identifiants Wi-Fi6133 × 3333 × 3341 × 4145 × 45
Lien avec codes de suivi8937 × 3741 × 4149 × 4953 × 53
Carte de contact20253 × 5357 × 5765 × 6577 × 77
Taille de grille du plus petit QR code qui contient le contenu à chaque niveau.

Un lien court tient dans la plus petite grille à trois niveaux sur quatre, car cette grille a de la place libre. Un contenu plus long grandit vite : la carte de contact au niveau H demande 77 × 77 modules, presque dix fois la surface du lien court.

C’est important, car ce que l’appareil photo doit voir, c’est le module, pas le code. Sur un code imprimé de 2,5 cm de large, le lien court a des modules de 1 mm, et la carte de contact au niveau H des modules de 0,3 mm, à peu près la taille d’un grain de sel. Ce sont les petits modules qui font échouer les codes sur les impressions de mauvaise qualité, à distance et sous une faible lumière.

Combien de dégâts un code supporte

Pour tester les niveaux, nous avons masqué le centre de chaque code avec un carré blanc, là où l’on place généralement un logo, et augmenté sa taille d’un pour cent de la surface du code à la fois, jusqu’à l’échec du lecteur de notre lecteur de QR code.

ContenuLMQH
Lien court5 %6 %9 %16 %
Identifiants Wi-Fi5 %8 %14 %19 %
Lien avec codes de suivi7 %11 %20 %20 %
Carte de contact8 %12 %19 %15 %
Le plus grand carré centré, en part de la surface du code, qui permettait encore la lecture.
Deux copies du même QR code de niveau H avec un carré blanc au centre. Avec 20 % de la surface masquée, il se lit encore ; avec 24 %, non.
Niveau H avec le centre masqué. Quelques pour cent de plus ont fait la différence.

Deux choses ressortent. D’abord, la tolérance réelle était plus faible que les chiffres de la norme, souvent d’un tiers ou plus. Un carré masqué coupe des mots de code sur ses bords, en abîmant plus que sa taille ne le laisse penser, et il peut cacher des repères d’alignement dont le lecteur se sert pour trouver la grille. Ensuite, les niveaux les plus élevés n’ont pas toujours gagné : sur la carte de contact, H a échoué avant Q. Les codes plus grands ont plus de repères d’alignement qu’un carré centré peut toucher, et chaque lecteur gère les dégâts un peu différemment.

La leçon pratique est de garder une marge. Si un code doit supporter des dégâts, ne comptez pas utiliser toute sa correction d’erreur.

Les logos dans les QR codes

Un logo fonctionne en abîmant volontairement le code et en comptant sur la correction d’erreur pour le réparer. Notre générateur de QR code relève le niveau à Q quand vous ajoutez un logo, s’il était plus bas, et limite la surface cachée par le logo à une part de ce que ce niveau peut récupérer. Nous avons vérifié toutes les combinaisons de nos quatre types de contenu, des niveaux M, Q et H et de tailles de logo de 24 à 40 %, la plus grande que propose le générateur : toutes ont été lues.

Faire un QR code qui se lit à tous les coups

  • Gardez un contenu court. Utilisez un lien court plutôt qu’un long lien avec des codes de suivi. C’est le plus gros gain, car moins de modules signifie des modules plus grands.
  • Prenez M pour les écrans et les impressions propres, Q pour les affiches, les emballages et tout ce qui porte un logo. Ne prenez H que pour un contenu court, pour que la grille reste petite.
  • Imprimez-le assez grand. Une règle courante veut une largeur de code d’au moins un dixième de la distance de lecture : 3 cm pour un chevalet de table lu à 30 cm, 30 cm pour une affiche lue à 3 mètres.
  • Gardez un fort contraste et une marge. Des carrés foncés sur fond clair, et une bordure libre d’au moins quatre modules. Les codes clairs sur fond foncé ne sont pas lus par toutes les applications.
  • Testez avant d’imprimer, avec un vieux téléphone comme avec un récent, à la vraie distance.

Les codes créés avec notre générateur sont statiques : le contenu est dans le code lui-même, il fonctionne donc pour toujours et ne dépend d’aucun service. Certains services font des codes « dynamiques » qui pointent vers leur propre serveur et redirigent de là, ce qui permet de changer la destination plus tard, mais cesse de fonctionner si le service ou votre abonnement prend fin.

Questions et réponses

Quel niveau de correction d’erreur choisir pour un QR code ?

M pour les écrans et les impressions propres, Q pour l’impression, l’extérieur et les codes avec logo. H rend le code bien plus dense : réservez-le aux contenus courts.

Quelle part d’un QR code peut-on masquer ?

Moins que les 7, 15, 25 et 30 % de la norme ne le laissent penser. Dans notre test, un carré centré pouvait masquer 5 à 8 % en L, 6 à 12 % en M, 9 à 20 % en Q et 15 à 20 % en H.

Un logo rend-il un QR code plus difficile à lire ?

Il consomme une partie de la correction d’erreur. Avec une correction au niveau Q et un logo de taille modeste, tous nos codes de test ont été lus.

Quelle est la taille minimale d’un QR code imprimé ?

Une règle courante veut une largeur d’un dixième de la distance de lecture, environ 2 à 3 cm pour un code lu à bout de bras. Un contenu court permet des codes plus petits.

Les outils de cet article

À lire aussi sur le blog

Données6 min de lecture

ZIP, 7z ou RAR : quel format d’archive est le meilleur ?

Nous avons compressé les mêmes dossiers de photos, vidéos, documents et données en ZIP, 7z et RAR, puis mesuré le poids et la vitesse. Le gagnant dépend presque entièrement de ce qu’il y a dedans.

Données6 min de lecture

CSV, Excel ou JSON : quel format pour vos données ?

Nous avons enregistré le même tableau de 100 000 lignes en CSV, en classeur Excel et en JSON, puis comparé les poids, la vitesse de lecture dans du code et ce qui se passe mal avec les dates, les zéros initiaux et les longs nombres.

Données5 min de lecture

Les timestamps Unix expliqués

Un timestamp Unix n’est qu’un nombre de secondes, et pourtant il cause un flot régulier de bugs. Ce qu’il compte, comment reconnaître secondes et millisecondes d’un coup d’œil, ce qui se passe avec les fuseaux et les secondes intercalaires, et pourquoi 2038 compte.

Échap