Correction d'erreurs des codes QR : comment L, M, Q et H fonctionnent vraiment

par l'équipe KoloQRBases

Les quatre niveaux de correction d'erreurs d'un code QR en grandes lettres sur des tuiles arrondies - Q, M, L et H - au-dessus d'une pastille portant la mention « Error Correction ».

La correction d'erreurs est la redondance intégrée à un code QR qui permet à un scanneur de reconstruire les données quand une partie du symbole est endommagée ou couverte. En un sens, un code QR stocke son contenu deux fois : une fois comme données, et une fois comme informations de récupération dérivées mathématiquement et réparties dans tout le symbole. Si une partie du code est rayée, tachée, pliée ou cachée derrière un logo, le scanneur reconstruit les morceaux manquants à partir de ce qui subsiste.

Points clés

  • La correction d'erreurs est la redondance intégrée à un code QR qui permet à un scanneur de reconstruire les données quand une partie du symbole est endommagée ou couverte.
  • Les quatre niveaux définis par la norme ISO/IEC 18004 récupèrent environ 7 % (L), 15 % (M), 25 % (Q) et 30 % (H) des données du code.
  • Une correction d'erreurs plus élevée réduit la capacité de données, donc la même URL exige une version de symbole plus grande - à largeur imprimée fixe, cela signifie des modules plus petits et un scan plus difficile.
  • La correction d'erreurs ne répare que la zone de données. Un dommage sur un motif de détection, sur les motifs de synchronisation ou sur la zone de silence rend en général le code illisible, quel que soit le niveau utilisé.
  • La correction d'erreurs ne peut pas compenser un faible contraste, un flou, un reflet ou un code imprimé trop petit, parce que ces défauts dégradent le symbole entier d'un coup plutôt qu'une de ses régions.

Qu'est-ce que la correction d'erreurs d'un code QR ?

Le mécanisme est le codage Reed–Solomon, la même famille de codes que celle utilisée sur les CD et dans les transmissions spatiales lointaines. Le codage Reed–Solomon est le schéma qui génère les mots de code de correction d'erreurs d'un code QR et reconstruit les données manquantes à partir de ceux qui restent intacts. Il travaille sur des mots de code, pas sur des carrés individuels. Un mot de code est un groupe de huit modules qu'un code QR traite comme une seule unité - soit une unité de données, soit une unité de correction d'erreurs.

La correction d'erreurs se choisit une seule fois, au moment de la génération, et elle est gravée dans le symbole. Le niveau est inscrit dans les informations de format, à côté des motifs de détection, si bien que n'importe quel scanneur peut lire le niveau utilisé. Le niveau de correction d'erreurs d'un code QR imprimé ne peut plus être changé après coup : le changer signifie régénérer et réimprimer le code.

Que signifient les niveaux de correction d'erreurs L, M, Q et H ?

Les quatre niveaux de correction d'erreurs QR récupèrent environ 7 % (L), 15 % (M), 25 % (Q) et 30 % (H) des mots de code du code. Chaque code QR en utilise exactement un. Les niveaux plus élevés ajoutent des mots de code de récupération, ce qui laisse moins de mots de code pour tes données réelles à taille de symbole donnée.

NiveauRécupération nominaleOctets en version 1 (21×21)Octets en version 10 (57×57)Usage typique
L (Low)~7 %17271Écrans, applications, URL longues, surfaces propres en intérieur
M (Medium)~15 %14213Le défaut courant ; travail d'impression général
Q (Quartile)~25 %11151Petit logo central, supports manipulés ou en extérieur
H (High)~30 %7119Logo plus grand, marquage industriel, abrasion, intempéries
Les capacités proviennent des tables de capacité en caractères de la norme ISO/IEC 18004, mode octet.

Les pourcentages décrivent des mots de code, pas une surface, et ils sont nominaux plutôt qu'exacts. La version 1 rend l'arithmétique visible : le symbole contient 26 mots de code au total, et Reed–Solomon peut réparer jusqu'à la moitié des mots de code de correction d'erreurs d'un bloc, moins une petite réserve que la norme met de côté pour réduire le risque de décoder de fausses données.

Niveau (version 1)Mots de code de donnéesMots de code ECMots de code réparablesPart des 26 au total
L19728 %
M1610415 %
Q1313623 %
H917831 %

Dans les symboles plus grands, les données sont réparties en plusieurs blocs Reed–Solomon et les mots de code sont entrelacés dans tout le symbole, si bien qu'une seule tache se distribue sur de nombreux blocs et que chaque bloc répare sa part. C'est cet entrelacement qui explique qu'une trace de tasse dans un coin soit en général survivable, et que le pourcentage nominal reste un repère raisonnable même si la correction se fait bloc par bloc.

Quel niveau de correction d'erreurs utiliser ?

Utilise M pour la plupart des codes QR imprimés, Q ou H quand un logo se pose sur le code ou que la surface prend des coups, et L uniquement sur les écrans ou quand le contenu est long et que le code doit rester grossier. M est le niveau par défaut de la plupart des générateurs, et pour une affiche, un dépliant, une carte de restaurant ou une carte de visite qui ne sera pas éraflée, M est la bonne réponse.

Règles de décision :

  • Si le code est affiché sur un écran, choisis L. Les écrans n'ont ni saleté, ni pliure, et un contraste parfait : la capacité de récupération y est une redondance gaspillée qui ne fait que densifier le code.
  • Si le code est imprimé sur papier et ne portera pas de logo, choisis M. M couvre la manipulation normale, l'engraissement de l'encre et les salissures légères.
  • Si le code porte un logo central, choisis Q au minimum, et H si le logo est grand. Le logo consomme la capacité de récupération qui absorberait sinon les erreurs d'impression et de scan.
  • Si le code part en extérieur, sur un emballage, sur une machine, ou partout où il sera frotté, plié ou exposé aux intempéries, choisis H. L'abrasion retire des modules définitivement.
  • Si le contenu est long et que le code doit rester physiquement petit, choisis L ou M et raccourcis plutôt le contenu. Relever le niveau sur une URL longue impose un symbole plus dense, ce qui est en général le plus gros risque.

Un contre-exemple concret est utile ici. La QR-facture suisse, la norme de paiement nationale pour la Suisse et le Liechtenstein, impose le niveau de correction d'erreurs M, un symbole fixe de 46 × 46 mm, une taille de module minimale de 0,4 mm et une croix suisse de 7 × 7 mm au centre du code. Cette croix couvre environ 2,3 % de la surface du symbole. Une norme bancaire nationale pose donc un logo sur un code QR au niveau M - parce que le logo est petit et que la taille des modules est garantie. Le niveau H n'est pas une exigence pour un logo ; c'est une compensation pour un grand logo.

Comment la correction d'erreurs change la taille d'un code QR imprimé

Relever le niveau de correction d'erreurs rend chaque module plus petit à largeur imprimée fixe, parce que les mêmes données exigent une version de symbole plus élevée, avec plus de modules par côté. C'est le compromis que la plupart des gens manquent : le niveau qui protège des dommages augmente aussi la densité qui provoque les échecs de scan au départ.

Prends une URL de 44 caractères comme https://koloqr.com/qr-codes-for/coffee-shops, encodée en mode octet et imprimée sur 25 mm de large :

NiveauVersion du symboleGrilleLargeur de module à 25 mmLargeur minimale du symbole avec des modules de 0,4 mm
L329 × 290,86 mm11,6 mm
M433 × 330,76 mm13,2 mm
Q433 × 330,76 mm13,2 mm
H537 × 370,68 mm14,8 mm

Deux choses ressortent de ce tableau. D'abord, passer de L à H réduit chaque module d'environ 21 % à taille d'impression égale - sur un support absorbant, c'est la différence entre des modules nets et des modules qui bavent les uns dans les autres. Ensuite, M et Q donnent la même version de symbole pour ce contenu, ce qui veut dire que Q est gratuit : le même code physique, la même taille de module, 25 % de récupération au lieu de 15 %.

Vérifie ce second point à chaque fois. Comme la capacité avance par paliers, monter d'un niveau de correction d'erreurs ne coûte souvent rien du tout. Génère le code au niveau que tu as choisi, note la taille de la grille, génère-le un niveau au-dessus, et compare. Si la grille est inchangée, prends le niveau supérieur.

Quelle part d'un code QR un logo peut-il couvrir ?

Un logo central couvrant jusqu'à environ 20 % de la surface d'un code QR est récupérable de façon fiable au niveau H dans la plupart des flux d'impression. Le plafond théorique en H est proche de 30 %, mais dépenser tout le budget de récupération dans le logo ne laisse rien pour l'engraissement de l'encre, un reflet, une trace de doigt ou un appareil photo légèrement flou - et ces erreurs sont prélevées sur le même budget.

Une règle pratique facile à vérifier : un logo circulaire dont le diamètre vaut la moitié de la largeur du code QR couvre environ 20 % de la surface du symbole. Un logo carré de côté 0,45 × la largeur du code en couvre à peu près autant. Tiens-t'en là et le niveau H garde environ un tiers de sa capacité en réserve.

Des règles qui comptent plus que le pourcentage :

  • Garde le logo au centre. Un logo centré répartit ses dégâts uniformément sur les blocs Reed–Solomon entrelacés. Un logo décentré de la même taille concentre les dégâts et risque davantage d'épuiser un bloc.
  • Ne laisse jamais le logo toucher les trois motifs de détection. Ces grands carrés dans les angles sont ce qui permet à un scanneur de localiser le code, et ils ne portent aucune correction d'erreurs.
  • Donne au logo un fond plein. Un logo posé directement sur les modules avec un fond transparent crée des demi-modules ambigus sur son pourtour, ce qui produit des erreurs que le décodeur doit quand même corriger en dépensant de la capacité.
  • Sur les symboles de version 7 et plus, surveille les motifs d'alignement. À partir de la version 7, des motifs d'alignement sont placés dans la zone de données, y compris près du centre. Un grand logo central peut en ensevelir un, ce qui se scanne en général encore de face mais peut échouer de biais ou sur une surface courbe.
  • Teste le code imprimé, pas l'aperçu à l'écran. Un logo qui fonctionne à 400 % de zoom sur un moniteur peut échouer à 25 mm sur du papier non couché.

KoloQR, un générateur de codes QR gratuit avec des codes QR circulaires et de forme personnalisée, prend en charge le placement d'un logo et te laisse régler le niveau de correction d'erreurs avant l'export. Les formes de modules décoratives - points arrondis, modules circulaires - réduisent la surface d'encre imprimée de chaque module, elles consomment donc une part de la tolérance que la correction d'erreurs est là pour fournir. Le stylisme n'améliore jamais la lisibilité au scan ; c'est la correction d'erreurs qui absorbe la différence. Voir les codes QR de marque pour ce que cela donne en pratique.

Les parties d'un code QR que la correction d'erreurs ne peut pas réparer

La correction d'erreurs ne protège que la zone de données. Les motifs structurels dont un scanneur a besoin avant de pouvoir décoder quoi que ce soit ne sont pas couverts par la correction Reed–Solomon, si bien qu'un dommage à cet endroit est en général fatal, que le code ait été généré en L ou en H.

  • Motifs de détection. Les trois carrés concentriques dans les angles en haut à gauche, en haut à droite et en bas à gauche indiquent au scanneur où se trouve le symbole et comment il est orienté. Aucune redondance ne les protège. En couvrir un signifie généralement que le code n'est jamais détecté.
  • Zone de silence. La zone de silence est la marge vide de quatre modules autour d'un code QR qui permet à un scanneur de détecter où le symbole commence et se termine. Du texte, une bordure ou une photo poussés dans cette marge cassent la détection alors que chaque module à l'intérieur du code est encore parfait.
  • Motifs de synchronisation. Les lignes alternées d'un module de large qui courent entre les motifs de détection fixent la grille des modules. Un dommage ici désaligne toute la lecture.
  • Motifs d'alignement. Présents à partir de la version 2, ils corrigent la distorsion de perspective. En perdre un est souvent survivable sur un scan plat et de face, beaucoup moins sur une bouteille courbe ou un panneau de biais.

Les informations de format font exception. La bande de modules à côté des motifs de détection qui enregistre le niveau de correction d'erreurs et le motif de masque est elle-même protégée par un code BCH et stockée deux fois dans le symbole : elle survit donc seule à pas mal de dégâts.

Ce contre quoi la correction d'erreurs ne protège pas

La correction d'erreurs répare les dommages localisés, pas la dégradation globale. Passer de M à H ne change rien pour un code trop petit, trop pâle, flou ou mal éclairé - ces problèmes touchent tous les modules à la fois, et il ne reste aucune zone intacte à partir de laquelle le décodeur pourrait reconstruire.

Des échecs qu'un niveau de correction d'erreurs plus élevé ne résoudra pas :

  • Un code imprimé trop petit pour ses données. En dessous d'environ 0,4 mm par module à l'impression, les appareils photo des téléphones peinent à résoudre la grille. Relever le niveau rend les modules plus petits et le problème pire.
  • Un faible contraste. Un scanneur a besoin d'une distinction nette entre clair et foncé. Un code gris pâle sur un fond crème échoue à tous les niveaux.
  • Des couleurs inversées. Les modules clairs sur fond foncé ne sont pas pris en charge partout ; plusieurs applications de scan et appareils photo natifs attendent du foncé sur clair.
  • Les reflets et le pelliculage. Un pelliculage brillant sous un spot renvoie la lumière dans l'appareil photo et efface tout le symbole.
  • Le flou de bougé et la faible lumière. Les deux dégradent l'image entière, pas un coin de celle-ci.
  • Une URL de destination erronée ou morte. La correction d'erreurs garantit que le scanneur lit correctement la chaîne encodée. Elle ne dit rien sur le fait que cette adresse réponde encore.

Quand un code échoue par intermittence sur le terrain et que l'exemplaire imprimé a l'air net, la cause est presque toujours la taille des modules, le contraste ou l'éclairage - pas le niveau de correction d'erreurs.

Correction d'erreurs à l'écran et à l'impression

À l'écran, le niveau L est en général le meilleur choix ; à l'impression, M est le plancher raisonnable. Un code QR sur un affichage ne court aucun des risques physiques pour lesquels la correction d'erreurs existe - pas d'engraissement d'encre, pas de pliure, pas d'abrasion, pas de saleté - la capacité de récupération n'achète donc rien et les modules supplémentaires rendent le code plus dense que nécessaire.

Points propres à l'écran : un code affiché sur un téléphone et scanné par un autre téléphone se bat contre les reflets et la luminosité de l'écran, ce à quoi une correction d'erreurs plus élevée ne répond pas. Augmente plutôt la taille d'affichage et la luminosité de l'écran.

Points propres à l'impression : un support absorbant étale l'encre, et chaque module déborde légèrement sur ses voisins. Cet engraissement est une vraie source d'erreurs, et c'est exactement ce que les niveaux M et Q absorbent. Le papier couché étale moins ; le papier journal, le kraft et le tissu étalent plus. Exporte en SVG plutôt qu'un PNG agrandi pour que les modules restent géométriquement exacts à la résolution de l'imprimeur - KoloQR exporte à la fois le PNG et le SVG.

Comment tester les dommages que ton code QR supporte vraiment

Teste le code réellement imprimé plutôt que de faire confiance au pourcentage nominal - le niveau t'annonce le budget, le tirage te dit combien en a déjà été dépensé. La procédure ci-dessous prend environ quinze minutes et te donne un chiffre sur lequel t'appuyer.

  1. Génère le code avec les réglages définitifs. Même contenu, même niveau de correction d'erreurs, même logo, exporté en SVG.
  2. Imprime avec les réglages de production, sur le support de production. Même imprimante, même papier, même pelliculage. Une épreuve laser sur du papier de bureau ne prédit pas le comportement d'un carton non couché.
  3. Scanne l'impression intacte à la distance prévue avec deux téléphones. Un iOS et un Android, avec l'appareil photo natif. Si ça échoue déjà là, arrête-toi et corrige la taille ou le contraste avant de tester les dommages.
  4. Couvre 10 % de la surface du symbole en son centre avec du ruban opaque. Pour un code de 25 mm, un carré de 8 × 8 mm est proche de 10 %. Scanne de nouveau.
  5. Augmente la surface couverte par paliers de 5 % jusqu'à ce que le code cesse de se scanner. Note le dernier pourcentage qui fonctionnait - c'est ta tolérance réelle.
  6. Recommence avec les dommages placés sur un bord, puis en travers d'un angle. En évitant les motifs de détection. Un dommage sur un bord échoue souvent plus tôt qu'un dommage au centre.
  7. Recommence sous l'éclairage réel. La surface de vente, le restaurant le soir, l'allée de l'entrepôt.
  8. Compare le résultat au niveau nominal. Si un code de niveau H échoue à 12 % de couverture, le budget restant a été consommé par la qualité d'impression. Agrandis le code, raccourcis l'URL, ou passe sur une surface moins absorbante.

Note le chiffre. C'est la donnée la plus utile à avoir avant de lancer un tirage.

Erreurs fréquentes au moment de choisir un niveau de correction d'erreurs

L'erreur la plus fréquente en matière de correction d'erreurs est de choisir H par défaut, en supposant que plus de protection est toujours plus sûr. Sur une URL longue à petite taille d'impression, H produit un code plus dense qui échoue plus souvent que la version M qu'il a remplacée.

À fairePourquoi
Raccourcir l'URL avant de relever le niveauMoins de caractères, c'est une version de symbole plus basse, des modules plus grands et plus de tolérance réelle que n'en apporte aucun changement de niveau
Vérifier si le niveau au-dessus change la taille de la grilleLa capacité avance par paliers, donc monter d'un niveau est souvent gratuit
Utiliser H pour les codes en extérieur, industriels et d'emballageL'abrasion et les intempéries retirent des modules définitivement, et c'est exactement à cela que sert la capacité de récupération
Tester l'exemplaire imprimé avec des dommages appliquésLe pourcentage nominal est un plafond, pas une garantie
À éviterPourquoi
Utiliser H pour compenser un code trop petitDes modules plus petits causent plus d'échecs que la correction d'erreurs n'en répare
Remplir tout le budget de récupération avec un logoLes erreurs d'impression, de reflet et de mise au point puisent dans le même budget, et il n'en reste plus
Supposer que H protège les motifs de détectionAucun niveau de correction d'erreurs ne les protège ; un motif de détection couvert, c'est aucune détection
Compter sur la correction d'erreurs pour survivre à une zone de silence absenteLa détection échoue avant même que le décodage commence, la capacité de récupération n'est donc jamais utilisée
Relever le niveau après un échec du code sur le terrainDiagnostique d'abord le contraste, la taille et l'éclairage ; le niveau en est rarement la cause

Questions? Answered

Utilise Q au minimum, et H si le logo couvre plus d'environ 15 % du code. Garde le logo centré, sur un fond plein, et dans les 20 % environ de la surface du symbole au niveau H. Cela laisse de la capacité de récupération pour les erreurs d'impression et d'appareil photo, qui puisent dans le même budget que le logo.

Pas toujours. Les niveaux plus élevés absorbent plus de dommages mais réduisent la capacité de données, donc le même contenu exige une version de symbole plus grande et des modules plus petits à largeur imprimée égale. Pour une URL longue sur un petit code imprimé, le niveau M se scanne souvent plus fiablement que le niveau H.

Non. Le niveau est encodé dans les informations de format du symbole et détermine la construction du code entier : il ne peut donc pas être modifié après coup. Régénère le code avec le nouveau niveau et réimprime-le. Si la destination doit changer elle aussi, c'est un problème distinct - un code statique pointe vers une URL fixe.

Le scanneur signale normalement un échec de lecture plutôt que de renvoyer de fausses données. Les codes QR réservent un petit nombre de mots de code de protection contre les erreurs de décodage dans les plus petites tailles de symbole, précisément pour réduire le risque qu'un code corrompu se décode en une valeur plausible mais fausse.

Non. Les trois motifs de détection, les motifs de synchronisation et la zone de silence ne portent aucune correction d'erreurs. Un scanneur en a besoin pour localiser et aligner le symbole avant que le décodage commence : en couvrir un signifie donc en général que le code n'est jamais détecté - même au niveau H avec une zone de données par ailleurs parfaite.

La cause habituelle est la taille des modules ou le contraste, pas les dommages. Le niveau H réduit la capacité de données, donc le symbole se densifie à largeur imprimée égale. Mesure un module : en dessous d'environ 0,4 mm à l'impression, les appareils photo des téléphones peinent, quel que soit le niveau. Agrandis le code ou raccourcis l'URL.

La plupart des générateurs utilisent le niveau M par défaut, qui récupère environ 15 %. Ce défaut est un compromis raisonnable pour l'impression, mais il vaut mieux le vérifier que le supposer - certains outils partent sur L, et certains relèvent le niveau en silence quand tu ajoutes un logo, ce qui change la version du symbole et la densité imprimée.

À peine. Les niveaux plus élevés ajoutent des modules, donc l'appareil photo résout une grille un peu plus dense et le décodeur exécute une passe Reed-Solomon un peu plus longue, mais sur un téléphone moderne la différence n'est pas perceptible. La vitesse de scan dépend bien davantage de l'éclairage, de la distance de mise au point et de la taille des modules.

Non. Les mots de code de correction d'erreurs sont dérivés mathématiquement du contenu et ne portent aucune information indépendante. Tout ce qui semble ajouter une couche cachée - une forme, une couleur, une surimpression artistique - est une décoration qui consomme de la capacité de récupération, pas un second canal de données.

Pourquoi KoloQR ?

  • Crée des codes QR pour des sites web, des menus, le Wi-Fi, des PDF et des cartes de visite
  • Personnalise les couleurs, les logos et des formes uniques
  • Télécharge des fichiers PNG et SVG de haute qualité
  • Conçu pour l'impression comme pour le numérique
Générer un code QR
Un code QR noir tout simple à côté du même code redessiné en cercle avec des couleurs de marque