Un code QR, c'est quoi ?

android 15 avr. 2014

Vous les avez déjà croisés dans la rue, sur les arrêts de bus, sur des publicités… Les codes QR (ou « QR codes » en VO) ! Si si, ces petits codes en deux dimensions que vous pouvez « flasher » avec vos smartphones pour accéder à des infos et contenus supplémentaires !

Eh bien aujourd’hui, on va s’attarder sur le sujet : d’où ça vient, comment c’est construit, ce qu’on peut en faire…

 

Un peu d’histoire

Commençons par le début, et téléportons-nous au Japon, en 1994. Plus précisément dans les usines de Toyota. Pionniers de l’organisation, ils ont ressenti le besoin de suivre leurs pièces le long de la chaîne de production. Et ont donc mis au point (via l’entreprise Denso-Wave, aujourd’hui Denso Corporation, dont Toyota est un important actionnaire) un système permettant de répondre à ce besoin : le code QR (pour Quick Response, le but de la chose étant aussi de ne pas perdre de temps à le lire).

Après l’avoir gardé un moment pour elle, Denso a décidé de libérer son œuvre. C’est donc en 1999 que Denso-Wave a ouvert ses spécification touchant au code QR, permettant à celui-ci de se populariser au Japon. D’autres entreprises se sont mises à utiliser ce système, et de fil en aiguille, c’est devenu le code bidimensionnel le plus utilisé au Japon.

Comme toute bonne chose, le code QR s’est vu adapté sous forme de norme. Je vous passe le détail, ce qui compte c’est qu’ajourd’hui, les codes QR sont décrits par la norme ISO/CEI 18004:2006, à laquelle a été ajouté en 2009 un rectificatif technique (ISO/CEI 18004/AC1:2009).

Comme bien souvent, entre le moment où les spécifications ont été rendues publiques et le moment où la norme est parue, des « habitudes » étaient apparues, au point de devenir des « standards de faits » (comme pour le codage des URL). Il est donc important, encore aujourd’hui, d’utiliser des générateurs de QR codes respectueux de la norme officielle, afin de s’assurer que les destinataires arriveront à décoder les infos que vous avez placées dans le code QR.

Notez au passage que Denso possède toujours les brevets sur son invention : elle a juste choisi de ne pas les utiliser… Le mot « QR code » est pour sa part une marque déposée de la même entreprise.

 

Mais ça marche comment ?

Un code QR, c’est « seulement » constitué de caractères, qu’on a représentés sous la forme de points noir et blancs. Cependant, la forme du code répond à des règles bien précises, afin de permettre sa lecture par les décodeurs. Je vous mets ici le schéma présent sur Wikimedia Commons, parce que je ne vois pas l’intérêt de refaire un truc déjà clair.

La structure d'un code QR -- Crédits : Zephyris [CC-BY-SA-3.0], via Wikimedia Commons
La structure d’un code QR — Crédits : Zephyris [CC-BY-SA-3.0], via Wikimedia Commons

C’est grâce aux différents points fixes et requis (position, timing et alignement) que le décodeur « sait » qu’il s’agit d’un code QR, et dans quel sens le lire (si si, amusez-vous à flasher un code QR à l’envers ou de travers, ça fonctionne toujours).

La capacité de stockage (la quantité d’information que vous pouvez stocker dans un code QR) dépend de sa taille : plus c’est grand, plus on peut y mettre d’informations. Logique imparable.

Si vous avez bien lu le schéma, vous aurez remarqué qu’il parle de correction d’erreurs. Comme dans beaucoup de cas de figures, on parle ici de redondance. Un gros mot, un peu. C’est à dire que ce que vous avez encodé dans le code peut être décodé, même s’il en manque un petit bout. Comme pour quand on causait de fonctions de hachage et tout ce qui va avec, on ne va pas non plus rentrer dans le détail, on n’est pas là pour faire des maths…

 

Encoder les informations ?

Maintenant que vous savez ce qu’est un code QR… Il serait bien de savoir comment on y stocke des informations, non ? Voyons ça.

Organisation des informations
Organisation des informations

Comme vous pouvez le voir, en dehors des zones fixes citées précédemment, un code QR est divisé en tout un tas de petites zones plus ou moins indépendantes. Les blocs Dx contiennent les données stockées, les blocs Ex sont là pour la correction d’erreurs. Oui, il y en a beaucoup, cet exemple est un code de type H (pour High), c’est-à-dire avec un niveau élevé de redondance.

Prenons un autre exemple, plus petit, au sein duquel il est plus facile de visualiser le truc. Le schéma ci-dessus le montre, mais pas au premier coup d’œil : les informations ne sont pas stockées n’importe comment, il y a même un sens de lecture !

Sens de lecture
Sens de lecture

Ça s’éclaire un poil cette fois ? 🙂

On retrouve toujours le même principe, cela dit : une partie avec les données, une partie pour la correction d’erreur (notez que cette fois, elle est plus petite), des informations sur le format du code, et bien évidemment une partie fixe pour le positionnement etc.

 

Intéressons-nous à cette partie fixe, maintenant.

Format du QR code
Format du QR code

Voilà comment votre lecteur de code « sait » comment lire ce que vous flashez ! Tout lui est indiqué : niveau de redondance (Low, Medium, Quartile, High), le motif du code (i.e. quel genre de blocs de données et comment ils sont répartis)… et même une petite correction d’erreur, uniquement pour les infos de format ! Les informations de format et leur correction sont d’ailleurs présents deux fois… (Oui, ils ont pensé à tout. :mrgreen: )

 

Encore faut-il pouvoir les lire !

L’implémentation la plus efficace à mon sens, et une des plus courantes (et recommandée par un certain nombre d’acteurs, comme le fait par exemple Google avec les codes QR de son Play Store), est la librairie ZXing (pour Zebra Crossing). Au départ écrite en Java, elle a depuis été portée dans de nombreux langages.

Cette librairie est open-source et supporte, en plus des codes QR qui nous intéressent ici, un grand nombre de formats de codes 1D ou 2D (les EAN-13 par exemple), et est capable de reconnaître le format de l’information stockée. Par exemple, je peux scanner le code-barre d’un livre… et la librairie va comprendre qu’il s’agit d’un ISBN, et va même aller me chercher la référence si je suis connecté à Internet ! 😉

La preuve par l'exemple !
La preuve par l’exemple !

Vous voyez ici Barcode Scanner, l’implémentation officielle sous Android de ZXing. Vous pouvez l’installer depuis votre marché habituel, même si je vous conseille comme d’habitude de le récupérer sur F-Droid. L’app est sous licence Apache2.

 

Quels types de codes QR ?

En soi, il n’y a qu’un type de code QR. C’est juste ce que vous y stockez qui peut suivre une structure particulière, pour être reconnu comme tel par le lecteur, et donc vous orienter vers tel ou tel choix.

On peut citer :

  • une URL, pour vous renvoyer vers un site web ;
  • une vCard, qui contient toutes les informations nécessaires pour que le lecteur vous propose de l’importer dans vos contacts ;
  • un réseau Wi-Fi, donc contenant le nom du réseau, le type de sécurité, la clé de chiffrement… Plus besoin de la taper à la main, juste un code à flasher pour que votre tablette/téléphone se configure comme un grand. OVH livre des autocollants de ce type avec son modem-routeur ! 😀
  • du texte simple, évidemment ;
  • une adresse e-mail, un numéro de téléphone ;
  • un évènement au format vCalendar, pour l’ajouter directement à votre agenda ;
  • et d’autres !

Le projet ZXing met à disposition un générateur de QR code : c’est ici.

 

Un petit bémol…

Un QR code, ça attire l’œil, ça fonctionne bien, ça a un aspect pratique qu’il serait injuste de nier. Mais voilà : en regardant un de ces codes « à l’œil nu », ça ne vous dit pas ce qui y est stocké. La prudence reste de mise.

 

C’est fini pour aujourd’hui !

J’espère avoir éclairci vos esprits curieux mais embrumés gâce à cet article. J’ai moi-même appris un certain nombre de choses en l’écrivant, et ça me fait d’autant plus plaisir de partager ça avec vous ! 🙂

Les codes QR sont de plus en plus répandus. La plupart des smartphones sont livrés avec une application capable de les décoder. « Livrés avec » sous-entend malheureusement que l’utilisateur n’a pas le choix de l’application. Du moins si : il peut en ajouter une nouvelle, mais ne peut pas virer l’ancienne (application système, donc pas désinstallable sans rooter le mobile).

Les possibilités sont quasi-infinies, la créativité allant en ce sens : des villes ont fait des parterres fleuris en forme de code QR, et j’en passe. Mais attention quand même aux usages détournés qui pourraient en être faits. Comme bien souvent en informatique, la meilleure protection, c’est avant tout la prudence, et éventuellement une once de réflexion.

Mots clés