Générateur de QR codes

Créez un QR code et voyez les décisions derrière : la répartition des modes, la version, le niveau de correction, les huit masques et le coût d’un logo.

Contenu
Ce qui est réellement encodé
https://seladevtools.com/qr-code-generator
Code

Version 3 · 29×29 modules · niveau M · masque 7

Options
Correction d’erreurs
Couleurs
Logo
Ce que l’encodeur a décidé
Version
3 · 29×29 modules
Niveau
M
Masque
7 (pénalité la plus faible)
Données
348 sur 352 bits
Mots de code
44 de données + 26 de correction, en 1 blocs

Segments

ModeCaractèresBits
byte42348

Pénalités des masques

MasqueSériesBlocsSemblable au repèreÉquilibreTotal
03253511200796
13313752800986
22943452800919
33223451600827
43303301200780
53123481600820
63223513200993
72892731600722

Les quatre règles pénalisent les longues séries d’une seule couleur, les blocs de 2×2, la séquence 1:1:3:1:1 qu’un lecteur confond avec un motif de repérage, et une proportion de modules sombres éloignée de la moitié. La plus basse gagne ; cliquez une ligne pour la forcer.

Quatre décisions cachées dans chaque QR code

Collez un texte dans un générateur de QR codes et il en sort un carré noir et blanc. Ce qu’on ne vous montre pas, c’est que l’encodeur vient de prendre quatre décisions distinctes à votre place, dont chacune change le résultat et dont chacune aurait pu être autre.

Cet outil les montre toutes les quatre, parce que c’est là que ça devient intéressant. Une fois qu’on les voit, le comportement qui semblait arbitraire — le code saute d’une taille quand on ajoute un caractère, un logo passe sur un code et pas sur le suivant — cesse de l’être.

  • La répartition des modes : la norme définit quatre façons d’empaqueter les caractères, et votre texte est réparti entre elles.
  • La version : un nombre de 1 à 40 qui fixe la grille entre 21×21 et 177×177 modules.
  • Le niveau de correction d’erreurs : L, M, Q ou H, qui décide de ce que le symbole peut subir tout en restant lisible.
  • Le masque : l’un de huit motifs appliqués en XOR sur les données pour casser les formes qui égarent un lecteur.

Aucune des quatre n’est affaire de préférence. Chacune a une bonne réponse, les trois autres étant fixées, et c’est précisément pour cela qu’il faut les regarder : elles interagissent.

Découper le texte est un problème de plus court chemin

Le mode numérique dépense 10 bits par tranche de trois chiffres. Le mode alphanumérique dépense 11 bits par tranche de deux caractères, pris dans un jeu de 45 : les chiffres, les majuscules, l’espace et neuf signes de ponctuation. Le mode octet dépense 8 bits par octet UTF-8. Le mode kanji dépense 13 bits sur un caractère qui en coûterait 24 en mode octet.

L’encodage le moins cher est donc rarement un seul mode pour toute la chaîne — mais changer n’est pas gratuit non plus, puisque chaque segment paie un indicateur de mode de 4 bits et un champ de comptage. Savoir si une suite de chiffres mérite d’être isolée dépend de sa longueur. Cela fait du découpage un problème de plus court chemin, et cet encodeur le résout exactement plutôt que de deviner avec une règle empirique.

HELLO12345678901234567890

as one alphanumeric segment
  4 + 9 + (11 x 12) + 6 = 151 bits

split at the digits
  4 + 9  + (11 x 2) + 6 =  41 bits
  4 + 10 + (10 x 6) + 7 =  81 bits
  total                 = 122 bits

Vingt-neuf bits, ce qui en version 1 fait la différence entre tenir et ne pas tenir. La table des segments de la page montre le découpage réellement retenu par l’encodeur et ce qu’a coûté chaque segment, de sorte qu’on voit quels caractères sont chers.

La version et le découpage se courent après

Voici la subtilité qui met un encodeur naïf en défaut. Le champ de comptage des caractères n’a pas une largeur fixe. Il fait 8 bits pour le mode octet dans les versions 1 à 9, et 16 bits à partir de la version 10 ; le numérique passe par 10, 12 et 14 aux mêmes frontières.

Autrement dit le coût du découpage dépend de la version, et la version dépend du coût du découpage. La porte de sortie est de remarquer qu’il n’y a que trois groupes de versions : le découpage est calculé une fois par groupe, et la plus petite version dans laquelle l’un d’eux tient l’emporte.

  • Versions 1–9 : numérique 10 bits, alphanumérique 9, octet 8, kanji 8.
  • Versions 10–26 : numérique 12, alphanumérique 11, octet 16, kanji 10.
  • Versions 27–40 : numérique 14, alphanumérique 13, octet 16, kanji 12.

Le masque est choisi par quatre règles de pénalité

Les données d’un QR code sont proches de l’aléatoire, et du noir et blanc aléatoire produit des formes qu’un lecteur peut confondre avec les motifs structurels qu’il cherche. Le remède consiste à appliquer un XOR sur la zone de données avec un motif régulier choisi pour casser ces formes. Il y en a huit, et l’encodeur les essaie tous.

Chaque symbole masqué est noté par quatre règles de la norme, et le total le plus bas l’emporte. La table de la page montre les huit notes détaillées par règle, et cliquer une ligne force ce masque pour en voir l’effet.

  • Séries : trois points pour cinq modules adjacents d’une même couleur en ligne ou en colonne, plus un par module supplémentaire.
  • Blocs : trois points pour chaque zone 2×2 d’une seule couleur.
  • Semblable au repère : quarante points pour la séquence 1:1:3:1:1 sombre-clair-sombre-clair-sombre à côté de quatre modules clairs — le motif qui ressemble aux carrés des coins.
  • Équilibre : dix points par tranche entière de 5% dont la proportion de modules sombres s’écarte de la moitié.

Les implémentations divergent légèrement ici : sur le fait que le motif 1:1:3:1:1 compte aussi à plus grande échelle, et sur l’inclusion des informations de format dans la note. Cet encodeur suit la lecture de ZXing, celle qui tourne sur la plupart des appareils photo de téléphone, et il est verrouillé contre deux implémentations indépendantes. Ce désaccord ne produit jamais de code invalide ; il décide seulement lequel de plusieurs masques parfaitement lisibles est retenu.

Ce que coûte vraiment un logo au centre

Tout le monde répète la même règle : le niveau H récupère 30%, donc on peut couvrir jusqu’à 30% du code. C’est une réponse de la mauvaise forme, et la suivre finira par vous donner un code qui ne se scanne pas.

La correction d’erreurs d’un QR code n’est pas un pot commun. Les données sont découpées en blocs Reed-Solomon, chacun avec ses mots de correction, et les blocs sont entrelacés sur toute la grille pour qu’une rayure abîme plusieurs blocs un peu plutôt qu’un seul beaucoup. Chaque bloc peut perdre environ la moitié de ses mots de correction et être reconstruit. Un logo au centre est un carré plein, exactement la forme que l’entrelacement est censé étaler — mais il ne l’étale jamais uniformément.

La question n’est donc pas quelle part du symbole est couverte, mais combien a perdu le bloc le plus touché. Cette page sait à quel mot de code appartient chaque module et de quel bloc vient chaque mot de code : elle peut donc répondre directement. Chargez un logo et elle indique les dégâts par bloc et la marge restante au plus touché.

  • Couvrir un motif de repérage, un motif de synchronisation ou les informations de format n’est pas une affaire de budget : ils ne portent aucune correction, et un lecteur qui ne les trouve pas n’arrive jamais à l’étape de la correction.
  • La moitié des mots de code est une borne supérieure. L’impression, les reflets, les surfaces courbes et l’usure puisent dans le même budget : un code pile à la limite à l’écran ne l’est plus sur une tasse.
  • Monter au niveau H pour caser un logo plus grand agrandit le symbole, donc rapetisse chaque module à taille imprimée égale — parfois une perte plutôt qu’un gain.

Les formats de charge utile, et où ils mordent

Un QR code Wi-Fi ou une carte de visite ne sont que du texte mis dans une forme que les lecteurs reconnaissent. Les formes sont simples ; c’est sur les règles d’échappement que les vrais codes cassent, et ce sont des échecs silencieux : le code se scanne parfaitement et donne la mauvaise réponse.

WIFI:T:WPA;S:Cafe\; Bar;P:p\:ssw\,rd;;

BEGIN:VCARD
VERSION:3.0
N:Lovelace;Ada;;;
FN:Ada Lovelace
ORG:Analytical Engines\, Ltd
END:VCARD

Dans le format Wi-Fi, le point-virgule termine un champ : un mot de passe qui en contient un tronque donc l’identifiant s’il n’est pas échappé — comme la virgule, les deux-points, le guillemet et la barre oblique inverse. Un nom de réseau composé uniquement de chiffres hexadécimaux doit être mis entre guillemets, faute de quoi il est lu comme une valeur hexadécimale et non comme du texte. Dans vCard, les séparateurs sont le point-virgule et la virgule, une ligne de plus de 75 octets doit être repliée sur une ligne de continuation commençant par une espace, et la fin de ligne est CRLF.

Les constructeurs présents ici appliquent tout cela et disent ce qu’ils ont fait, au lieu de réécrire votre saisie en silence. Si un avertissement apparaît sous les champs, c’est que quelque chose dans votre texte a demandé un traitement — ce qu’il vaut généralement mieux savoir avant d’imprimer mille autocollants.

Questions fréquentes

Pourquoi un caractère de plus a-t-il tant agrandi le code ?
Parce qu’il a changé la répartition des modes, la version, ou les deux. Une seule minuscule dans une chaîne en majuscules peut faire basculer tout un segment du mode alphanumérique vers le mode octet, qui coûte huit bits par caractère au lieu de cinq et demi. Passer de la version 9 à la 10 élargit par ailleurs chaque champ de comptage. La table des segments montre où sont partis les bits.
Quel niveau de correction d’erreurs choisir ?
M est le choix par défaut raisonnable, et c’est celui de la plupart des codes en circulation. Passez à Q ou H quand le code sera imprimé petit, sur une surface courbe, sur un objet manipulé, ou quand vous couvrez le centre d’un logo. Descendez à L seulement quand la charge est longue et que le code se lit à l’écran. Les niveaux élevés ne donnent pas de fiabilité gratuite : ils agrandissent le symbole pour les mêmes données, et un symbole plus grand imprimé à la même taille a des modules plus petits.
Quelle taille de logo peut-on mettre au centre ?
Chargez-le et la page vous le dira, car la réponse honnête dépend de la version, du niveau et de l’endroit où tombent les blocs. Ce qu’elle ne fera pas, c’est répéter la règle des 30%, qui parle de mots de code et non de surface, et du symbole entier et non du pire bloc. Comme point de départ, 15% du côté au niveau H passe généralement, 25% généralement pas.
Mettre une URL en majuscules réduit-il vraiment le code ?
Souvent, oui. Le mode alphanumérique n’a pas de minuscules : une URL en minuscules part donc en mode octet à huit bits par caractère, tandis qu’une URL en majuscules tient en alphanumérique à cinq et demi. Le schéma et l’hôte sont insensibles à la casse, donc HTTPS://EXAMPLE.COM fonctionne exactement comme https://example.com — mais le chemin est sensible à la casse et ne doit pas être touché. La page mesure le gain sur votre URL réelle et ne propose la modification que lorsqu’elle aide.
Le mode kanji vaut-il le coup pour du texte japonais ?
Oui : 13 bits par caractère là où le mode octet en UTF-8 en dépense 24, si bien que le texte japonais sort à peu près à moitié plus court. Il couvre la plage deux octets de Shift_JIS, qui comprend les kana, les kanji de JIS X 0208, mais aussi le grec et le cyrillique. Cette page ne charge la table de correspondance que lorsque votre texte n’est pas de l’ASCII pur : un code portant une URL ne la télécharge donc jamais.
Faut-il activer la déclaration UTF-8 ?
En général non. La norme dit que le mode octet est de l’ISO-8859-1 sauf si un en-tête ECI dit le contraire, mais en pratique tout lecteur fabriqué en ce siècle le traite comme de l’UTF-8, et c’est ce que cet encodeur écrit. La déclaration explicite coûte 12 bits et déroute certains lecteurs industriels anciens. Activez-la si vous visez un lecteur précis qui documente la prise en charge d’ECI.
Pourquoi ni Micro QR ni code en plusieurs parties ?
Les deux existent dans la norme et les deux vous donneraient quelque chose qui ne se scanne pas. Micro QR est une symbologie distincte avec ses propres tables de capacité, son jeu de masques et son codage de format, et la plupart des applications photo ne le lisent pas. Structured Append répartit la charge sur jusqu’à seize symboles que pratiquement aucun lecteur grand public ne recompose. Si vos données ne tiennent pas en version 40, la réponse est de mettre une URL dans le code et les données derrière.
Jusqu’à quelle taille peut-on imprimer un QR code ?
La consigne habituelle veut qu’un module fasse au moins 0,4 mm à l’impression et que le code représente environ un dixième de la distance de lecture divisée par la taille de la version — mais la contrainte pratique, c’est la zone de silence. La norme demande quatre modules de marge nette sur tous les côtés, et l’échec le plus fréquent dans la vraie vie est un code collé à d’autres éléments graphiques. La version et le nombre de modules affichés sur la page sont ce qu’il faut pour faire ce calcul.