QR Code - Frédéric Reby

"Mais comment ça marche ce truc?"

Ce code fait partie de la famille des codes à 2 dimensions, il peut encoder jusqu'à 7089 caractères sur une très petite surface. L'encodage se fait en deux étapes : tout d'abord les données sont converties en un flux de bit découpé en mots-clé. (Encodage de haut niveau) puis ceux-ci sont convertis en petits carrés noirs et blancs. (Encodage de bas niveau) De plus un système de correction des erreurs permet de reconstituer des données mal imprimées, effacées, floues ou arrachées.

La structure générale :

  • Le QR code est une zone carrée constituée de lignes et colonnes (Numérotées à partir de 0). Chaque cellule est un petit carré noir ou blanc appelé module. Le symbole comporte 3 motifs de repérage aux coins supérieurs et inférieur gauche le rendant bien reconnaissable. La dimension du symbole est appelée la version, il en existe 40 ayant de 21 à 177 modules (par pas de 4 modules). Le niveau de correction (parmi 4) est noté L, M, Q ou H
  • Les couleurs peuvent être interverties : blanc sur noir ; le symbole peux aussi être retourné par effet miroir.
  • Le protocole ECI (Extended Channel Interpretation) procure un mode pour spécifier une interprétation particulière des valeurs des octets ou pour identifier une page de code particulière.
  • Par défaut le code ECI est 000003 qui désigne l'alphabet Latin ISO 8859-1.
  • Le mécanisme de correction des erreurs est basé sur les codes de Reed-Solomon.

Le symbole comporte un certains nombre de modules de fonction :

  1. Les 3 motifs de repérage de 8 x 8 modules
  2. Des mires d'alignement de 5 x 5 modules (position : voir tableau)
  3. 2 bandes de synchronisation alternant module blanc et noir, une horizontale en ligne 6 et une verticale en colonne 6
  4. Des zones d'information de format et de version accolées aux motifs de repérage
  5. Les modules de fonctions (mires, synchro, info,...) étant placés, les données sont placées en partant du coin inférieur droit en allant de droite à gauche, d'abord en montant puis en redescendant et en contournant tous les modules de fonction.
  6. Une marge blanche de 4 modules doit encadrer le code.

La capacité de stockage d'informations.

Les codes QR peuvent stocker jusqu'à 7 089 caractères numériques, 4 296 caractères alphanumériques, bien au-delà de la capacité du code-barres (une douzaine de caractères).
Capacité maximale de stockage de données (version 40, 177×177 modules):

  • Caractères numériques : maximum 7 089
  • Caractères alphanumériques : maximum 4 296
  • Binaires (8-bits) : maximum 2 953 octets
  • Kanji/Kana : maximum 1 817 caractères
Selon la quantité de données stockées, le QR Code sera plus ou moins complexe. Ainsi, il existe 40 versions de QR Code différentes définies dans les spécifications. Chacune de ces versions ont une capacité de stockage maximale et telle ou telle version sera utilisée en fonction de la quantité d'informations que l'on veut stocker dans le QR Code. Toutefois, il est important de noter que plus un QR Code a une version élevée, plus il sera difficile à décoder. Ainsi, pour permettre une meilleur lecture, le nombre de patterns de détection de position augmentera en fonction de la version utilisée. De plus, on remarquera que pour un QR Code très simple (version 1), il n'y a pas besoin de pattern d'alignement.

Un codage fiable par redondance.

la redondance est employée dans le QR Code de manière à prévenir toute altération du motif et ainsi fournir au lecteur l'information codée originale sans problèmes. C'est le code correcteur d'erreurs du QR Code qui créé la redondance afin d'accroître la fiabilité de l'information. L'objectif d'un code correcteur est la détection ou la correction d'erreurs après la transmission d'un message. Cette correction est permise grâce à l'ajout d'informations redondantes. Un recalcul de la somme des nombres devrait permettre de retomber sur le même premier nombre de redondance d'information. Le QR Code a donc cette capacité de fournir l'information même s'il est abîmé. Et ce, grâce au code correcteur particulier qu'il contient : Le code de Reed-Solomon.

Créer et lire un Qr code:

La création

Il faut rappeler tout d'abord que lors de la génération du QR Code, on décidera du taux de correction d'erreur à appliquer au QR Code. En effet, un QR Code peut être généré avec 4 niveaux de taux de correction d'erreur différents selon les spécifications et qui permettent d'obtenir une certaine tolérance quant à la perte d'informations exprimée en poucentage.

  • L : LOW, permet une tolérance jusqu'à 7% de perte de code.
  • M : MEDIUM, permet une tolérance jusqu'à 15%.
  • Q : QUALITY, permet une tolérance jusqu'à 25%.
  • H : HIGH, permet une tolérance jusqu'à 30%.
Déroulons l'algorithme d'encodage d'un QR Code :
  1. Analyse des données à encoder et paramétrage du niveau de code correcteur. Le but est d'analyser le flux de données d'entrée pour identifier la variété des caractères différents pour être encodés. Si l'utilisateur n'a pas spécifié le niveau de code correcteur , la plus petite version de QR Code sera sélectionnée pour accueillir les données.
  2. Convertir les caractères de données dans un flux de bytes. Ce sont par exemple, en langage Java, des objets ByteArray qui seront utilisés
  3. Implémenter la correction des erreurs. Le but est de séparer par blocs les bits de données et de génerer leurs codes correcteurs. Comme vu pour le code de Reed-Solomon, on place un bit d'information et autour, on génère du code correcteur.
  4. Insérer les données avec le code correcteur dans la matrice. On utilise ici le masque de patterns (Timing pattern, pattern de detection, pattern d'alignement)
  5. Générer la matrice et évaluer le résultat qu'elle retourne. On optimise ici la balance entre les modules noirs et les modules blancs et on minimise l'occurrence de patterns indésirables.
  6. Générer le QR Code au format image. C'est le résultat final qui pourra être lu par un lecteur de QR Code.

La Lecture

Déroulons donc l'algorithme de lecture :

  1. Reconnaître les bits 1 ou 0.Le but est de différencier les modules noirs des modules blancs.
  2. Identifier le taux de code correcteur.
  3. Identifier la version du QR Code.
  4. Découvrir la région à décoder.
  5. Lire les données et le code correcteur.
  6. Détecter/Corriger les erreurs.
  7. Décoder les données.
  8. Afficher le résultat.
Voilà, voilà...

Comment fonctionne un QR code ? Ça se falsifie ?, Scilabus Structure d'un code QR (version 7) Ordre de lecture (version 1) Les différentes versions du QR Code en fonction de leur capacité de stockage Exemple simplifié de repérage et de correction d'erreur, Mickaël De Almeida, Université ESPIE-MLV Pour une vue d'ensemble des codes correcteurs
keyboard_double_arrow_up