GuideNacho G.13 min de lecture

Niveaux de Correction d'Erreur QR : Reed-Solomon

Niveaux de correction d'erreur des codes QR (L, M, Q, H) expliqués avec les vraies mathématiques Reed-Solomon, le compromis par version et des données réelles.

Niveaux de Correction d'Erreur QR : Reed-Solomon

Cet article a ete redige par l'equipe QR Nova. Nous developpons des logiciels de codes QR, ce qui peut influencer notre point de vue.

Chaque article sur les niveaux de correction d'erreur des codes QR répète les mêmes quatre points : L récupère 7%, M récupère 15%, Q récupère 25%, H récupère 30%. Copier, coller, terminé. Aucun n'explique pourquoi ces chiffres précis existent, ce qu'un code QR fait réellement avec les données récupérées, ni pourquoi un code de niveau H peut, dans certaines conditions réelles, scanner moins bien qu'un code de niveau M. Les niveaux de correction d'erreur déterminent combien de codewords de parité Reed-Solomon sont ajoutés à un code QR, et ce nombre est un compromis direct avec la capacité de données et la taille physique du code, pas un simple "pourcentage de protection" abstrait. Comprendre ce compromis, plutôt que mémoriser quatre lettres, c'est ce qui détermine vraiment si votre code scanne de façon fiable. Le générateur gratuit de QR Nova construit chaque code avec une protection maximale par défaut, ce compromis vaut donc la peine d'être compris, que vous touchiez ou non à un panneau de réglages.

TL;DR

  • Les quatre niveaux (L 7%, M 15%, Q 25%, H 30%) décrivent la part de codewords de parité Reed-Solomon ajoutés, pas seulement un score générique de "résistance aux dommages".
  • Passer de L à H réduit la capacité de données utilisable de 53 à 57% environ, quelle que soit la version de QR, selon les tables de codewords de l'ISO/IEC 18004.
  • Le test 2021 du développeur Huon Wilson avec ZBar, qui a scanné les 40 versions et les 4 niveaux de correction, a montré que les codes de niveau H scannaient avec succès 60% de fois en plus que ceux de niveau L sous dommage simulé, mais le niveau H impose aussi une version de QR plus grande et plus dense pour les mêmes données, ce qui peut exiger davantage de champ de vision pour scanner que le niveau L.
  • Le niveau H est nécessaire pour les logos superposés et les environnements physiques difficiles. Il nuit activement à la fiabilité de scan des codes petits, propres et bien éclairés à cause de la densité supplémentaire qu'il impose.
Graphique en barres comparant les codewords de données et les codewords de parité Reed-Solomon selon les niveaux de correction L, M, Q et H

Que Sont les Niveaux de Correction d'Erreur d'un Code QR ?

Générez un code QR à protection maximale — gratuit

Commencer

Les niveaux de correction d'erreur d'un code QR sont quatre réglages configurables, L, M, Q et H, qui déterminent combien de codewords de parité Reed-Solomon sont ajoutés aux données d'un code QR lors de l'encodage. Un niveau qui réserve plus de codewords de parité peut reconstruire davantage de données corrompues si le code imprimé est endommagé, partiellement masqué ou mal lu, mais il laisse moins de codewords disponibles pour votre contenu réel à la même taille physique. C'est pourquoi le choix n'est pas "quel niveau est le meilleur", mais "combien de capacité de données suis-je prêt à sacrifier pour combien de tolérance aux dommages".

Chaque code QR que vous avez déjà scanné a déjà fait ce compromis, que la personne qui l'a généré le sache ou non. La plupart des générateurs utilisent le niveau M par défaut, la recommandation même de DENSO Wave pour un usage général, car il équilibre raisonnablement capacité et résilience sans que personne n'ait à y réfléchir.

Si vous avez d'abord besoin de la décision pratique en langage simple, notre guide des quatre niveaux ECC et notre résumé du niveau à utiliser pour les logos, l'impression et la signalétique extérieure couvrent déjà ce terrain. Cet article se concentre sur le mécanisme Reed-Solomon, les mathématiques de capacité par version et les données réelles de scan derrière ces recommandations.

Les quatre niveaux, précisément

  • L (Low) : récupère jusqu'à 7% des codewords endommagés. Capacité de données maximale à une version donnée.
  • M (Medium) : récupère jusqu'à 15%. Le réglage par défaut de la plupart des générateurs et celui recommandé par DENSO Wave pour un usage général.
  • Q (Quartile) : récupère jusqu'à 25%. Utilisé pour les codes soumis à une usure modérée, ateliers, étiquettes d'entrepôt.
  • H (High) : récupère jusqu'à 30%. Nécessaire pour les logos superposés et les environnements physiques difficiles.

Ces pourcentages ne sont pas du langage marketing, ce sont le résultat direct du nombre de codewords de parité que la norme alloue à chaque niveau, ce qui nous amène au mécanisme réel.

Pourquoi Quatre Niveaux Existent : Le Mécanisme Reed-Solomon Derrière L, M, Q, H

Les codes QR utilisent le codage Reed-Solomon, la même famille de codes correcteurs d'erreur utilisée dans les CD, les DVD et les communications spatiales lointaines, pour protéger les données contre les dommages physiques. Le mécanisme est identique aux quatre niveaux ; ce qui change, c'est le nombre de codewords de parité que chaque niveau génère. Pour la spécification complète sous laquelle ces niveaux sont définis, consultez notre résumé en langage clair de l'ISO 18004, la norme des codes QR.

Le corps de Galois GF(256), en termes simples

Les mathématiques de Reed-Solomon se déroulent dans GF(256), un corps de Galois contenant exactement 256 éléments, un pour chaque valeur d'octet possible (0-255). L'addition dans GF(256) est un simple XOR, sans retenue, totalement réversible. La multiplication suit un polynôme primitif fixe (les codes QR utilisent x^8 + x^4 + x^3 + x^2 + 1), ce qui permet d'exprimer toute valeur non nulle comme une puissance d'une racine primitive, transformant la multiplication en une simple addition d'exposants.

Voici pourquoi cela compte : en arithmétique ordinaire, diviser deux nombres peut produire une fraction sans reste exact. Dans un corps fini comme GF(256), tout élément non nul possède un inverse multiplicatif exact, donc la division polynomiale produit toujours un quotient et un reste propres. Cette propriété est le fondement entier de la correction d'erreur Reed-Solomon. Sans elle, l'astuce consistant à "vérifier le reste" pour détecter et localiser les erreurs ne fonctionnerait tout simplement pas.

Comment les niveaux de correction changent la répartition des codewords

Lors de l'encodage, vos données deviennent un polynôme. Il est multiplié par x^r (où r est le nombre de codewords de parité du niveau choisi) puis divisé par un polynôme générateur construit à partir de puissances consécutives de la racine primitive de GF(256). Le reste de cette division, exactement r octets, devient les codewords de parité ajoutés à vos données.

r est tout le mécanisme derrière les quatre lettres. Un niveau de correction plus élevé signifie simplement un r plus grand, plus de codewords de parité calculés et stockés, ce qui explique aussi pourquoi il réduit directement les codewords de données disponibles à une version de QR fixe. Un lecteur peut corriger jusqu'à r / 2 codewords corrompus (ou jusqu'à r "effacements" connus, des positions signalées comme peu fiables lors de l'échantillonnage) grâce aux calculs de syndrome et aux algorithmes de Berlekamp-Massey et de Forney. Nous détaillons cette séquence de décodage étape par étape dans comment fonctionne techniquement le scan d'un code QR ; cet article se concentre sur ce qui change entre L, M, Q et H, pas sur le pipeline de décodage lui-même.

Le Vrai Compromis : Correction d'Erreur vs. Capacité de Données

Voici la partie que presque aucun article ne montre : exactement combien de capacité chaque niveau coûte, sur des versions réelles de QR, en utilisant les tables de codewords définies dans l'ISO/IEC 18004.

Version QR Codewords totaux Codewords de données en L en M en Q en H Perte de capacité L → H
1 (21×21) 26 19 16 13 9 53%
5 (37×37) 134 108 86 62 46 57%
10 (57×57) 346 271 213 151 119 56%
40 (177×177) 3706 2953 2331 1663 1273 57%

Le nombre total de codewords par version ne change jamais, il est fixé par la taille physique de la grille. Ce qui varie, c'est la répartition entre codewords de données et de parité. Regardez la dernière colonne : pour chaque version vérifiée, passer du niveau L au niveau H coûte environ 53 à 57% de votre capacité de données utilisable, un ratio constant quelle que soit la taille du code. C'est ce chiffre, plus que les pourcentages bruts, qui devrait guider votre choix de niveau.

Pourquoi plus de correction rend le code plus grand, pas seulement "plus sûr"

Comme le nombre total de codewords par version est fixe, encoder la même quantité de données à un niveau de correction plus élevé oblige souvent votre générateur à passer à la version de QR supérieure, plus de modules, un symbole imprimé physiquement plus grand ou plus dense, pour accueillir à la fois vos données et les codewords de parité supplémentaires. Une URL qui tient confortablement dans un code version 3 au niveau L pourrait nécessiter une version 5 au niveau H. C'est une différence de taille réelle et visible sur votre support imprimé, pas un détail technique caché.

Tolérance Réelle aux Dommages : Théorie vs. Ce Qui Se Passe Vraiment

Les chiffres 7/15/25/30% sont des maximums théoriques sous dommage idéal, réparti uniformément. L'expérience 2021 du développeur Huon Wilson a testé cela face à des dommages simulés plus réalistes, reflets, saleté et obstruction partielle, à l'aide du décodeur open source ZBar.

Wilson a superposé 10 motifs de bruit à 8 niveaux de dommage sur les 40 versions de QR aux 4 niveaux de correction d'erreur, soit 12 800 configurations au total, et a compté combien scannaient avec succès.

Les codes de niveau H ont scanné avec succès 2 001 fois sur l'ensemble des configurations, le niveau M 1 600 fois, le niveau Q 1 839 fois, et le niveau L seulement 1 257 fois, soit environ 60% de scans réussis en plus au niveau H qu'au niveau L dans l'ensemble. Mais la correction d'erreur joue dans les deux sens : à version de QR fixe, les niveaux plus élevés scannent plus fiablement sous dommage ; à quantité de données encodées fixe, les niveaux plus élevés imposent une version plus grande avec plus de modules au total, ce qui peut exiger un champ de vision plus large pour scanner qu'un code de niveau inférieur portant les mêmes données. (Huon Wilson, « QR error correction helps and hinders scanning », 2021)

Deux éléments ressortent ici. D'abord, l'écart de 60% entre L et H sous dommage simulé est un résultat de scan réel et mesuré, pas une estimation marketing, exactement le genre de preuve que les articles génériques listant "les quatre pourcentages" ne citent jamais. Ensuite, la découverte de Wilson selon laquelle une correction d'erreur plus élevée peut aussi nuire au scan, une fois prise en compte la version de QR plus grande qu'elle impose à longueur de données fixe, correspond exactement au compromis capacité-densité que cet article mesure en codewords plus haut, obtenu de façon indépendante par des tests de scan réels plutôt que par les tables de l'ISO/IEC 18004. Pour être honnête, ZBar n'est qu'un décodeur parmi d'autres, et le scanner de caméra natif d'un téléphone peut se comporter différemment face à une même image de test. Les mathématiques Reed-Solomon sous-jacentes ne changent pas selon le logiciel qui les lit, donc le compromis mesuré par Wilson n'est pas un artefact propre à son protocole de test.

Graphique en barres montrant le nombre de scans réussis par niveau de correction L, M, Q et H dans le test de Huon Wilson (2021)

Pourquoi les Logos Superposés Ont Spécifiquement Besoin du Niveau H

Un logo centré ne grignote pas les bords d'un code QR, il efface un bloc entier de modules dans la partie la plus dense et la plus centrale du symbole. C'est exactement le type de dommage concentré que la correction d'erreur doit absorber, et il consomme le même budget de correction que l'usure physique. Nous couvrons la règle des 20% pour la taille du logo séparément dans comment ajouter un logo à un code QR ; voici le mécanisme derrière le fait que le niveau H soit spécifiquement requis.

Prenez un code QR version 5. Au niveau Q, il porte 72 codewords de parité sur 134 au total, soit une capacité de correction d'environ 36 codewords, près de 27% du symbole. Au niveau H, il porte 88 codewords de parité, une capacité de correction d'environ 44 codewords, près de 33% du symbole, avant même de compter les zones d'information de format et les motifs de repérage qui se trouvent hors de la zone de données corrigible.

Un logo dont on recommande généralement qu'il reste entre 20 et 30% de la surface visuelle d'un code QR consomme à lui seul la quasi-totalité du budget de correction du niveau Q, ne laissant presque aucune marge pour les imperfections d'impression, les bavures d'encre ou un coin un peu usé. Voyez le budget de correction comme un compte en banque : le logo fait son retrait en premier, avant qu'une rayure ou un reflet n'ait la moindre chance de faire le sien. Au niveau H, ce même logo laisse assez de marge pour absorber aussi la variance normale d'impression. C'est le mécanisme réel derrière le conseil que vous voyez partout d'"utiliser le niveau H pour les logos" : ce n'est pas une règle arbitraire, c'est une conséquence directe de la part du budget de correction qu'un logo centré consomme.

Code QR imprimé avec un logo circulaire centré sur un emballage produit, illustrant comment un logo consomme le budget de correction d'erreur

Quand une Correction d'Erreur Élevée Se Retourne Contre Vous

Voici la partie que presque aucun guide n'aborde, y compris la mise en garde « quand ne pas utiliser H » de notre propre guide des niveaux ECC : le niveau de correction d'erreur et la scannabilité ne sont pas le même axe, et imposer le niveau H à un code qui n'en a pas besoin peut le faire scanner moins bien. Ce qui suit est le mécanisme derrière cette mise en garde, pas seulement la recommandation.

Comme un niveau de correction plus élevé réduit votre capacité de données utilisable ou impose une version de QR plus grande à quantité de données égale, un niveau inutilement élevé produit une grille de modules plus dense à taille d'impression identique. Des modules plus denses signifient des carrés individuels plus petits, et des carrés plus petits sont plus difficiles à résoudre pour une caméra à distance, en faible lumière, ou sur un téléphone plus ancien ou d'entrée de gamme. L'algorithme de correction fonctionnant à 100% de sa capacité ne sert à rien si l'étape de binarisation en amont ne parvient pas à résoudre proprement les modules individuels. Vous finissez par échanger un bénéfice de tolérance aux dommages dont vous n'aviez pas besoin contre un coût de scannabilité que vous ne vouliez pas.

Cela se retourne le plus visiblement dans trois situations :

  • Petits codes imprimés sans logo. Une carte de visite ou une étiquette produit de 2-3 cm n'a pas besoin de la pénalité de densité du niveau H si la destination n'a pas de logo superposé et que l'environnement d'impression est propre.
  • Codes affichés à l'écran. Un code affiché sur un ordinateur portable ou une TV pour être scanné est rarement endommagé ; forcer le niveau H ajoute de la densité sans bénéfice correspondant.
  • Matériel de scan bas de gamme ou ancien. Si votre public scanne probablement avec des téléphones Android d'entrée de gamme ou des caméras anciennes, un niveau de correction plus bas avec des modules plus grands et plus nets scanne souvent plus fiablement qu'un code plus dense et de niveau supérieur à la même taille physique.

Le réglage par défaut correct est le niveau M pour un usage général, en passant à Q ou H uniquement lorsque le code comporte un logo, subira une usure physique réelle, ou se trouve dans un endroit où la qualité d'impression ne peut pas être contrôlée précisément, pas l'inverse.

Choisir le Bon Niveau : Trois Exemples Réels

Le bon niveau dépend entièrement de ce que le code va rencontrer physiquement. Trois scénarios couvrent la plupart des cas réels :

Faible complexité : un code QR de menu sur chevalet de table

Éclairage intérieur propre, imprimé sur carton neuf, sans logo, scanné à 20-30 cm. Le niveau L ou M suffit. Il n'y a aucun dommage à corriger, et garder une faible densité de modules maximise la vitesse et la fiabilité de scan sur une large gamme de caméras de téléphone.

Le même environnement propre, mais cette fois un logo centré occupe environ 20% de la surface du code. Le niveau H est nécessaire ici, non pas parce que le flyer va s'abîmer, mais parce que le logo lui-même est une forme de perte de données concentrée et volontaire que seul le budget de correction du niveau H absorbe confortablement.

Complexité élevée : une étiquette d'actif pour équipement extérieur

Une étiquette résistante aux intempéries rivetée sur un équipement industriel, exposée à la décoloration solaire, à la saleté, aux rayures et à des années de manipulation, sans logo mais avec un risque physique réel. Le niveau H reste le bon choix ici aussi, pour une raison totalement différente du flyer : une usure physique réelle et cumulative sur une durée de service de plusieurs années, pas un choix de design.

Comment QR Nova Gère la Correction d'Erreur

Le générateur gratuit de QR Nova construit chaque code au niveau H, le palier maximal à 30% de récupération, automatiquement, sans inscription, aucun réglage à chercher, aucun palier payant, aucune étape supplémentaire. C'est un compromis délibéré : cela coûte un peu de capacité de données sur chaque code (la perte de 53-57% mesurée plus haut), en échange de la plus haute tolérance aux dommages disponible sur n'importe quel code que vous créez, avec ou sans logo.

Cela compte surtout pour les deux cas que ce guide identifie déjà comme nécessitant le niveau H de toute façon : les logos superposés et les codes qui subiront une usure physique réelle. Si votre priorité est de faire tenir une URL longue ou une vCard volumineuse sur un code propre et purement numérique, les tables de capacité ci-dessus sont ce qu'il faut vérifier avant de vous engager sur un contenu long, puisque le niveau lui-même n'est pas quelque chose que vous pouvez réduire.

Les codes statiques générés avec QR Nova, URL, WiFi, vCard, PDF, conservent ce niveau de correction d'erreur intégré de façon permanente dans l'image, sans dépendance à un serveur, sans abonnement requis pour que le code continue de fonctionner.

Check-list de Décision Rapide

Utilisez-la pour choisir un niveau en moins d'une minute :

Situation Niveau recommandé
Propre, intérieur, sans logo, usage général M
Entrepôt, atelier, usure modérée attendue Q
Logo couvrant 15% ou plus de la surface du code H
Extérieur, industriel, ou exposition physique de plusieurs années H
Très petite taille d'impression, sans logo, environnement propre L ou M (évitez la densité inutile)
Maximiser la capacité de données (longues URL, vCards) L

En cas de doute sur le niveau à choisir, ce tableau est le moyen le plus rapide de décider avant de générer quoi que ce soit. Le générateur gratuit de QR Nova construit chaque code au niveau H automatiquement, vous obtenez donc toujours la tolérance aux dommages maximale sans rien configurer, gardez juste le compromis de capacité en tête si vous encodez une URL longue.

Questions frequentes

Que sont les niveaux de correction d'erreur d'un code QR ?

Ce sont quatre réglages, L, M, Q et H, qui déterminent combien de codewords de parité Reed-Solomon sont ajoutés à un code QR en plus de ses données réelles. Le niveau L réserve la redondance la plus faible et récupère jusqu'à 7% des codewords endommagés ; le niveau H réserve la plus élevée et récupère jusqu'à 30%. Le coût, c'est la capacité de données : plus de codewords de parité signifie moins de place pour votre contenu réel et un symbole physiquement plus grand ou plus dense pour la même quantité de données.

Quelle est la différence entre les niveaux de correction L, M, Q et H ?

L (Low) récupère jusqu'à 7% des codewords endommagés et maximise la capacité de données. M (Medium) récupère jusqu'à 15% et est le réglage par défaut de la plupart des générateurs. Q (Quartile) récupère jusqu'à 25% et convient à une usure modérée. H (High) récupère jusqu'à 30% et est nécessaire pour les logos superposés ou les environnements physiques difficiles. Chaque niveau supplémentaire coûte entre 15% et 20% de capacité de données utilisable, quelle que soit la version du QR.

Quel niveau de correction utiliser pour un code QR avec logo ?

Utilisez le niveau H. Un logo centré couvrant 20 à 30% de la surface d'un code QR consomme à lui seul une grande part du budget de correction, et seul le plafond de 30% du niveau H laisse assez de marge pour le logo plus les imperfections d'impression normales. Aux niveaux M ou Q, un logo de cette taille peut dépasser le taux d'erreur récupérable et provoquer des échecs de scan, surtout sur des caméras de téléphone d'entrée de gamme.

Un niveau de correction plus élevé rend-il un code QR plus grand ?

Oui, si la quantité de données reste la même. Passer du niveau L au niveau H sur une même version de QR réduit la capacité de données utilisable de près de moitié (53 à 57% selon les tables de codewords de l'ISO/IEC 18004), donc encoder la même quantité de données en niveau H oblige souvent le générateur à passer à une version supérieure, avec plus de modules, c'est-à-dire un code imprimé physiquement plus grand ou plus dense.

Comment fonctionne réellement la correction d'erreur Reed-Solomon dans un code QR ?

L'encodeur traite les données comme un polynôme sur GF(256), un corps fini de 256 valeurs d'octet, et le divise par un polynôme générateur pour produire des codewords de parité, ajoutés aux données. Un lecteur recalcule la même division ; un reste non nul (le syndrome) signale un dommage, et les algorithmes Berlekamp-Massey et Forney localisent et corrigent les erreurs, jusqu'à la moitié du nombre de codewords de parité ajoutés. Nous détaillons ce décodage étape par étape dans notre guide sur le fonctionnement technique du scan d'un code QR.

Trop de correction d'erreur peut-elle rendre un code QR plus difficile à scanner ?

Oui. Le niveau de correction d'erreur et la scannabilité réelle sont deux variables distinctes, et imposer le niveau H à un code qui n'en a pas besoin densifie la grille de modules à la même taille d'impression, ce qui peut nuire au scan en faible lumière, à distance, ou avec des caméras bas de gamme. Le test 2021 du développeur Huon Wilson avec ZBar, qui a scanné les 40 versions de QR avec les quatre niveaux de correction, a montré que, pour une même quantité de données, la version de QR plus grande et plus dense du niveau H peut exiger davantage de champ de vision pour scanner que celle du niveau L, confirmant qu'une densité inutile a un coût mesurable.

Quel niveau de correction d'erreur QR Nova utilise-t-il par défaut ?

QR Nova génère chaque code au niveau H, le palier maximal à 30% de récupération, automatiquement. Il n'y a aucun réglage caché dans un tableau de bord ni de palier payant, chaque code gratuit reçoit la plus haute tolérance aux dommages par défaut. Le compromis, c'est la capacité de données réduite décrite plus haut, à prendre en compte si vous encodez une URL longue ou un contenu volumineux comme une vCard.

Le niveau H est-il toujours le choix le plus sûr pour un code QR imprimé ?

Non. Le niveau H est le bon choix spécifiquement pour les logos superposés, l'exposition extérieure ou industrielle, et les codes imprimés sur des matériaux sujets aux dommages. Pour un code propre, bien éclairé, en intérieur et sans logo, le niveau M voire L scanne tout aussi bien et garde le symbole imprimé plus petit et moins dense, ce qui constitue en soi un avantage de scannabilité.

Générez un code QR à protection maximale — gratuit

Commencer