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 :
- Les 3 motifs de repérage de 8 x 8 modules
- Des mires d'alignement de 5 x 5 modules (position : voir tableau)
- 2 bandes de synchronisation alternant module blanc et noir, une horizontale en ligne 6 et une verticale en colonne 6
- Des zones d'information de format et de version accolées aux motifs de repérage
- 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.
- 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
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%.
- 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.
- 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
- 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.
- 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)
- 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.
- 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 :
- Reconnaître les bits 1 ou 0.Le but est de différencier les modules noirs des modules blancs.
- Identifier le taux de code correcteur.
- Identifier la version du QR Code.
- Découvrir la région à décoder.
- Lire les données et le code correcteur.
- Détecter/Corriger les erreurs.
- Décoder les données.
- Afficher le résultat.