qr_code_2

Dis-moi, c'est quoi un QR Code ?

Un QR Quoi ?

Un QR Code ou Quick Response Code est une sorte de code barre amélioré qui sert à stocker des informations sous une forme lisible par un ordinateur : du binaire. Ainsi, dans un QR Code, chaque carré noir représente un 1 et chaque module blanc représente un 0. Ces carrés sont aussi appelés modules.

Voilà donc à quoi ressemblerait un QR Code si on le traduisait visuellement en 0 et en 1 :

Le QR Code en binaire
Capture d'écran de la vidéo de la YouTubeuse Scillabus sur le QR Code

Le fonctionnement des QR Codes est défini par la norme ISO/IEC 18004.

La composition du QR Code

Il existe différentes versions du QR Code : de la versions 1 avec 21 x 21 modules jusqu’à la version 40 avec 177 x 177 modules. Chaque version a une capacité de stockage de données et de correction d’erreur différents.

Variété des versions du QR Code

Prenons ici l’exemple simple de la première version du QR Code, d’une taille de 21 par 21 modules :

Les repères de positionnement. Ils vont permettre à l’ordinateur de distinguer le haut du bas ainsi que la droite de la gauche du QR Code

Une ligne horizontale et verticale dites de "timing". Situées entre les repères de positionnement avec un module sur deux noir, ces deux lignes en pointillés servent à indiquer au lecteur la taille des modules qui composent le QR Code, sa taille et donc sa version.

Le taux de correction. Il représente la quantité d’information que l’on peut perdre du QR Code et être toujours capable de le lire. Il y a 4 niveaux de correction possible :


Le masque utilisé. Nous allons voir à quoi il sert par la suite.

La zone de redondance. Elle permet à l’aide d’opérations mathématiques complexes, en lien avec le taux de correction, de regénéré l’information en cas de perte.

La zone de stockage de l'information.

Le mode d'encodage de l'information. Il est indiqué par les 4 pixels en bas à droite. Il y a différents modes d'encodage :


Décoder le QR Code

Pour commencer, un QR Code se lit de bas en haut et de droite à gauche en suivant un tracé en forme de "zig-zag" :

Ensuite, lorsqu’il y a une suite de 0 ou une suite de 1, c’est à dire que plusieurs blocs de mêmes couleurs forment un ensemble plus grand, il devient difficile pour le lecteur de distinguer les modules.

Et c'est là que le masque intervient. Il est choisi par le générateur du QR Code au moment de la génération et lorsqu'il est appliqué, tous les modules ayant été recouvert par un pixel noir sont inversés.

Voici les 8 différents types de masques et leur codage :

Ainsi, dans notre exemple, nous avons le masque 0 qui a été appliqué à notre QR Code.
Et pour retrouver visuellement l'information qui a été codée, il faut appliquer le masque à nouveau :

Ce qui donne ce QR Code :

On trouve ainsi comment a été encodé l'information :

Ici c'est en binaire.

Le codage étant en binaire la lecture de l'information va se faire par blocs de 8 modules.

Notons aussi que le premier bloc est un bloc informatif qui sert à donner la longueur de l'information codée. Ici ce segment en bit donne : 00001000 ce qui à l'aide de la table ASCII représente 8.
La chaîne codée dans nôtre exemple est donc longue de 8 caractères.

Le décodage du reste de l'information donne la suite de bits suivante :


01110100
01110011
01101001
00100000
01100011
01101001
01100001
01101110

Ce qui donne le message suivant :

tsi cian

Original non ?

Pour marquer la fin de l'information codée, une suite de 4 bits de 0 en début d'un nouveau bloc est utilisée. C'est le "terminator"... Littéralement.

Enfin, vous avez pu remarquer que la zone stockage de l'information n'est pas totalement utilisée. Pour pallier celà, nous utilisons une suite de bits appelés "byte padding" qui alterne en hexadécimal le codage de EC et 11 jusqu'au remplissage complet de la zone de stockage de l'information. Ici : le byte padding est : EC 11 EC soit en binaire : 111011000001000111101100

En résumé...

Pour lire un QR Code soi-même, il faut suivre les étapes suivantes :

  1. Trouver quel masque est utilisé
  2. Appliquer le masque
  3. Voir quel type d’information est codé et appliquer la lecture en blocs correspondante. En binaire, nous avons donc des blocs de 8 bits mais celà change en fonction du mode d'encodage : 10 bits pour le mode numérique, 11 pour le mode alphanumérique et 13 bits pour les Kanji.
  4. Isoler chacun des blocs
  5. Lire les blocs avec le bon sens de lecture
  6. Traduire les données
  7. Être heureux d'avoir réussi à décoder un QR Code à la main alors qu'on aurait pu utiliser son téléphone