Correction d'erreur des QR codes expliquée (L, M, Q, H) : quel niveau choisir vraiment ?
Ouvrez n’importe quel générateur de QR codes et vous verrez quatre options libellées L, M, Q et H. La plupart des gens gardent le réglage par défaut et passent à autre chose — jusqu’à ce que le code imprimé revienne de l’imprimeur illisible, ou qu’une équipe marketing place un logo au milieu et que tout le code cesse de fonctionner. Le niveau de correction d’erreur n’est pas un réglage cosmétique. Il détermine l’ampleur des dommages physiques qu’un code peut survivre, et il se paie directement en capacité de données.
Cet article explique ce que ces niveaux font réellement dans la spécification QR (ISO/IEC 18004), comment ils modifient la capacité avec des chiffres concrets, et comment choisir le bon pour votre cas d’usage.
Ce qu’est réellement la correction d’erreur
Un QR code n’encode pas seulement vos données — il encode aussi des informations redondantes qui permettent à un lecteur de reconstruire les parties endommagées ou illisibles du code. Le mécanisme est la correction d’erreur Reed–Solomon, la même famille d’algorithmes utilisée sur les CD, DVD, disques Blu-ray et dans les communications spatiales lointaines.
Lorsqu’un QR code est généré, les données utiles sont découpées en blocs, et pour chaque bloc l’encodeur calcule un ensemble de mots de code de correction d’erreur. Si un lecteur rencontre ensuite des modules (les carrés noirs et blancs) illisibles — à cause d’une rayure, d’une tache de café, d’un mauvais éclairage ou d’un logo superposé — il utilise ces mots de code redondants pour reconstruire mathématiquement ceux qui manquent.
Les codes Reed–Solomon ont une propriété utile : pour corriger t mots de code erronés à des positions inconnues, il faut 2t mots de code redondants. (Si l’on connaît les positions des mots de code endommagés — on parle alors d’« effacements » — chaque mot de redondance en corrige un.) Le niveau de correction d’erreur contrôle simplement quelle part du budget total de mots de code est consacrée à la redondance plutôt qu’aux données utiles.
Les quatre niveaux, en chiffres
La spécification ISO/IEC 18004 définit quatre niveaux de correction d’erreur avec les capacités de récupération approximatives suivantes — la part de mots de code pouvant être endommagés tout en restant intégralement récupérables :
| Niveau | Nom | Capacité de récupération |
|---|---|---|
| L | Low (faible) | ~7 % des mots de code |
| M | Medium (moyen) | ~15 % des mots de code |
| Q | Quartile | ~25 % des mots de code |
| H | High (élevé) | ~30 % des mots de code |
Deux nuances importantes que le pourcentage unique masque :
- Le pourcentage s’applique aux mots de code, pas à la surface des modules. La règle populaire « le niveau H survit à 30 % du code recouvert » est approximativement vraie en pratique parce que les dommages sont généralement contigus, mais la limite formelle porte sur les mots de code endommagés. Un dommage spatialement concentré (comme un logo) est souvent plus facile à survivre que le même nombre d’erreurs dispersées aléatoirement, car les effacements coûtent moins cher à corriger que les erreurs de position inconnue.
- Les niveaux élevés coûtent de la capacité. Plus de redondance signifie moins de place pour les données utiles à version (taille) égale. Si les données ne rentrent pas, l’encodeur doit passer à une version plus grande — plus de modules, impression plus dense, lecture plus difficile à distance.
Capacité : ce que les niveaux vous coûtent en pratique
Les QR codes existent en 40 tailles appelées versions. La version 1 fait 21×21 modules, et chaque version suivante ajoute 4 modules par côté, jusqu’à la version 40 à 177×177. Le tableau ci-dessous reprend les capacités maximales en caractères issues de la spécification pour trois types de données représentatifs, pour les quatre niveaux. (Le mode octet couvre les données binaires arbitraires proches de l’UTF-8 et les URL typiques ; le mode alphanumérique couvre 0–9 A–Z espace $%*+-./: ; le mode numérique ne contient que des chiffres.)
| Version | Modules | Niveau | Numérique | Alphanumérique | Octet |
|---|---|---|---|---|---|
| 1 | 21×21 | L | 41 | 25 | 17 |
| 1 | 21×21 | M | 34 | 20 | 14 |
| 1 | 21×21 | Q | 27 | 16 | 11 |
| 1 | 21×21 | H | 17 | 10 | 7 |
| 5 | 37×37 | L | 255 | 154 | 106 |
| 5 | 37×37 | M | 202 | 122 | 84 |
| 5 | 37×37 | Q | 144 | 87 | 60 |
| 5 | 37×37 | H | 106 | 64 | 44 |
| 10 | 57×57 | L | 652 | 395 | 271 |
| 10 | 57×57 | M | 513 | 311 | 213 |
| 10 | 57×57 | Q | 364 | 221 | 151 |
| 10 | 57×57 | H | 288 | 174 | 119 |
| 20 | 97×97 | L | 2061 | 1249 | 858 |
| 20 | 97×97 | M | 1600 | 970 | 666 |
| 20 | 97×97 | Q | 1120 | 679 | 466 |
| 20 | 97×97 | H | 861 | 521 | 358 |
| 40 | 177×177 | L | 7089 | 4296 | 2953 |
| 40 | 177×177 | M | 5596 | 3391 | 2331 |
| 40 | 177×177 | Q | 3993 | 2420 | 1663 |
| 40 | 177×177 | H | 3057 | 1852 | 1273 |
Lisez attentivement la version 1 : passer de L à H fait chuter la capacité en octets de 17 à 7 — une réduction de 59 %. Ce compromis vaut généralement le coup pour l’impression, mais c’est un coût réel. Une URL longue qui tient confortablement dans un code de version 4 au niveau M peut imposer une version 6 au niveau H, et des codes plus grands signifient des modules plus petits à taille d’impression égale.
Des données courtes battent toujours une correction d’erreur plus forte. Une URL courte dans un code de petite version au niveau H sera presque toujours mieux scannée qu’une URL longue dans un code de grande version au niveau L. Si vous encodez une URL, utilisez un domaine court ou une redirection. Cela compte plus que toute autre optimisation.
Taille d’impression et distance de lecture : la règle du 10:1
La correction d’erreur ne peut pas sauver un code tout simplement trop petit pour être résolu. La règle de terrain largement utilisée est le ratio 10:1 : la distance de lecture ne doit pas dépasser environ 10 fois la largeur du code. Certaines références considèrent 10:1 comme prudent et citent des scans réussis jusqu’à près de 15:1 avec de bons appareils photo et un bon éclairage, mais 10:1 est le chiffre sur lequel dimensionner.
- Code sur carte de visite, 2 cm de large → fiable jusqu’à ~20 cm
- Code sur affiche, 10 cm de large → fiable jusqu’à ~1 m
- Code sur panneau publicitaire, 1 m de large → fiable jusqu’à ~10 m
Deux contraintes associées :
- La taille des modules. Chaque module doit faire au moins environ 0,4 mm (2 mils est bien trop petit ; 0,4 mm est un plancher d’impression courant) pour que les appareils photo des téléphones puissent le résoudre. Pour un code de version 10 (57 modules), cela représente une taille physique minimale d’environ 2,3 cm rien que pour la zone de données.
- La zone de silence (quiet zone). La spécification exige une marge d’au moins 4 modules d’espace blanc autour du code. Rogner la zone de silence est l’une des causes d’échec les plus fréquentes des codes imprimés, et aucun niveau de correction d’erreur n’y remédie — les lecteurs s’en servent pour repérer les bords du code.
Pourquoi les logos exigent le niveau H
Incruster un logo au centre d’un QR code est la raison d’être classique du niveau H. Le logo recouvre physiquement des modules, détruisant les mots de code situés en dessous. C’est le budget de récupération d’environ 30 % du niveau H qui rend cela surmontable.
Règles pratiques pour la superposition d’un logo :
- Utilisez H. Toujours. Au niveau M (~15 %), un logo de taille modeste consomme déjà la majeure partie du budget.
- Gardez le logo sous ~30 % de la surface totale du code — et de préférence nettement en dessous, car la zone recouverte est rarement répartie proprement entre les blocs de mots de code. Un logo couvrant 20 % de la surface au niveau H est un design confortable ; 28 %, c’est du jeu de hasard.
- Restez au centre. Les trois motifs de repérage (les grands carrés dans les coins) et les motifs de synchronisation et d’alignement portent des données structurelles que la correction d’erreur ne protège pas de la même façon. Un placement central les évite.
- Testez sur de vrais téléphones, à distance réelle, sous un mauvais éclairage. Pas seulement votre téléphone haut de gamme posé sur un bureau. Les anciens appareils Android dotés d’appareils photo médiocres constituent le plancher pour lequel vous concevez.
Notez que les générateurs qui vous laissent déposer un logo sur un code sans demander de niveau misent implicitement sur le niveau choisi ailleurs. Si vous réglez L et ajoutez un logo, vous créez un code qui échoue souvent mais pas toujours — le pire résultat possible, car il passe les tests rapides et échoue sur le terrain.
Comment choisir concrètement
Niveau L (~7 %) — Contextes purement numériques où l’image est rendue parfaitement : transfert d’application à application, écrans, billets générés affichés sur un téléphone. Des pixels propres signifient que presque rien ne peut mal tourner ; consacrez donc le budget à la capacité et à la petite taille. Rarement le bon choix dans les autres cas.
Niveau M (~15 %) — Le défaut général pour une impression propre : cartes de visite, emballages de produits, documents. Survit à l’usure normale de manipulation, aux défauts d’impression mineurs et aux reflets. La plupart des générateurs le choisissent par défaut, et pour de bonnes raisons.
Niveau Q (~25 %) — Environnements physiques difficiles sans logo superposé : étiquettes industrielles, rayonnages d’entrepôt, plaques d’équipement, signalétique extérieure exposée aux intempéries. Si la surface sera rayée, sale ou partiellement masquée en usage normal, Q est la valeur sûre.
Niveau H (~30 %) — Superposition de logo, environnements très difficiles, ou situations où un scan raté coûte cher (codes de paiement, étiquettes critiques pour la sécurité). C’est aussi le bon choix lorsque vous devez imprimer très petit en anticipant des appareils photo de mauvaise qualité.
L’arbre de décision se résume ainsi : numérique → L ou M ; impression propre → M ; environnement rude → Q ; logo ou fiabilité critique → H. Et quel que soit le niveau : gardez des données courtes, préservez la zone de silence et respectez la règle de distance 10:1.
Vérifiez par vous-même
La théorie, c’est bien, mais la correction d’erreur des QR codes se teste facilement de façon empirique. Générez la même URL à chaque niveau avec notre générateur de QR codes et comparez :
- Générez le code au niveau L, puis M, Q et H. Observez l’augmentation de la densité des modules — cette densité visuelle est la redondance.
- Imprimez la version de niveau H, recouvrez le centre avec une pièce ou un autocollant (~20 % de la surface), puis scannez-le. Il devrait encore fonctionner.
- Essayez la même chose avec la version de niveau L. Ça ne marchera pas.
- Prenez le code de niveau H et recouvrez progressivement davantage de surface jusqu’à ce que les scans échouent — vous constaterez que la limite pratique est proche des ~30 % théoriques.
Vous verrez aussi directement le compromis de capacité : collez une URL longue et observez quelle version (taille) chaque niveau exige. Cette expérience enseigne le compromis plus vite que n’importe quel tableau.
Résumé
- La correction d’erreur des QR codes est une redondance Reed–Solomon ; le niveau fixe la part du budget de mots de code consacrée à la redondance : L ≈ 7 %, M ≈ 15 %, Q ≈ 25 %, H ≈ 30 % de récupération.
- Les niveaux élevés réduisent la capacité — en version 1, H contient moins de la moitié des octets de L.
- Des données courtes battent une correction plus forte ; raccourcissez les URL avant de monter en niveau.
- Dimensionnez l’impression avec la règle de distance 10:1 et ne rognez jamais la zone de silence de 4 modules.
- Logo superposé ⇒ niveau H, logo sous ~30 % de la surface, centré, testé sur des téléphones bas de gamme.
Générez quelques variantes avec le générateur de QR codes et le bon niveau pour votre cas d’usage deviendra évident en cinq minutes.