QR Code (code-barres) définition, encodage et décodage
QR Code
Les QR codes (Quick Response) ont fait leur apparition depuis un certain temps et sont pour ceux qui ne le sauraient pas encore, des code-barres à deux dimensions. Ceux-ci permettent d’emmagasiner du texte dans une image, constituée d’éléments noirs disposés sur un fond blanc. Après avoir été scannées et décodées, celles-ci peuvent déclencher diverses actions : navigation internet, envoi de mail, appel téléphonique, envois de SMS et j’en passe… Si les QR codes se démarquent des code-barres traditionnels, c’est avant tout parce qu’ils permettent d’embarquer plus de données. L’autre avantage des QR Codes réside dans le fait qu’ils peuvent être lus grâce à pas mal d’applications et sur un grand nombre de terminaux différents. À commencer par nos Smartphones.
Les différents Qr Code
URL
L’application la plus courante des codes-barres consiste à encoder le texte d’une URL telle que https://google.com/m
. Pour ce faire, il suffit d’encoder exactement le texte de l’URL dans le code-barres : https://google.com/m
. Incluez le protocole (ici https://
) pour vous assurer qu’il soit reconnu comme une URL.
Les lecteurs doivent ouvrir l’URL dans le navigateur Web de l’appareil lors du décodage d’une URL. Il est probablement souhaitable que le lecteur affiche l’URL et demande à l’utilisateur s’il souhaite continuer, afin que celui-ci puisse voir l’URL avant d’y accéder.
Des URL préfixées par URLTO:
ont été observées dans la nature
(par exemple URLTO:google.com/m
).
Il est intéressant de noter que, dans certains cas, les codes QR peuvent en fait encoder les données plus efficacement si seules des lettres majuscules sont utilisées. En effet, ils disposent d’un mode d’encodage spécial pour les textes composés uniquement de lettres (majuscules), de chiffres et de symboles courants. Il peut donc être avantageux d’encoder une URL telle que HTTP://MYSITE.COM/FOO...
plutôt que http://mysite.com/foo...
pour cette raison. Cependant, cela dépend de la capacité du serveur web à répondre correctement aux requêtes lorsque l’URI est en majuscules. Il n’est pas forcément vrai que les URI et les chemins d’accès sont traités comme insensibles à la casse par un serveur web, car les URI sont techniquement sensibles à la casse. N’essayez pas cela sans avoir testé au préalable que cela fonctionne.
Notez que NTT DoCoMo utilise un format de signet MEBKM pour exprimer non seulement une URL, mais aussi un titre. Cela peut être traité comme une URL ou inviter l’utilisateur à ajouter un signet au navigateur.
Adresse e-mail
Pour encoder une adresse e-mail telle que sean@example.com
, il suffit d’encoder sean@example.com
. Cependant, pour s’assurer qu’elle soit reconnue comme une adresse e-mail, il est conseillé de créer une URL mailto:
appropriée à partir de l’adresse : mailto:sean@example.com
.
Toutes les astuces/liens mailto:
standard devraient également fonctionner ici. Les lecteurs devraient ouvrir un message électronique vierge à l’adresse indiquée.
1
2
3
4
5
6
7
8
9
10
11
# Address
mailto:someone@yoursite.com
# Address, subject
mailto:someone@yoursite.com?subject=Mail%20from%20Our%20Site
# Address, CC, BCC, subject
mailto:someone@yoursite.com?cc=someoneelse@theirsite.com,another@thatsite.com,me@mysite.com&bcc=lastperson@theirsite.com&subject=Big%20News
# Address, CC, BCC, subject, body
mailto:someone@yoursite.com?cc=someoneelse@theirsite.com,another@thatsite.com,me@mysite.com&bcc=lastperson@theirsite.com&subject=Big%20News&body=Body%20goes%20here.
Voir aussi…
Notez que NTT DoCoMo a normalisé un format MATMSG pour l’encodage des adresses e-mail, des objets et des messages.
Numéros de téléphone
Une URI tel
doit être utilisée pour encoder un numéro de téléphone, afin de garantir que les chiffres soient interprétés comme un numéro de téléphone. De plus, vous devez généralement utiliser la version la plus complète possible d’un numéro de téléphone (c’est-à-dire l’indicatif du pays + l’indicatif régional + le numéro). Par exemple, pour encoder le numéro de téléphone américain 212-555-1212, il faut encoder tel:+1-212-555-1212
. Cet URI tel comprend un préfixe +1
qui le rend utilisable en dehors des États-Unis.
Les lecteurs doivent invoquer le numéroteur de l’appareil, le cas échéant, et le préremplir avec le numéro donné, mais sans lancer automatiquement un appel.
1
2
# NYC Directory assistance
tel:+12125551212
Voir aussi…
- CSS-Tricks: The Current State of Telephone Links
- Apple URL Scheme Reference: Phone Links
- Android: Common Intents
Coordonnées
Nous disposons, par exemple, du format vCard pour encoder les coordonnées sous forme de texte. Ce format s’avère un peu trop verbeux pour être utilisé dans les codes-barres 2D, dont la capacité d’information est limitée. Il n’est pas clair si vCard est ou devrait être utilisé pour encoder les coordonnées.
NTT DoCoMo a popularisé un format compact, le format MECARD, pour encoder les coordonnées. Par exemple, pour encoder le nom Sean Owen, l’adresse 76 9th Avenue, 4th Floor, New York, NY 10011
, le numéro de téléphone 212 555 1212
et l’adresse e-mail srowen@example.com
, il faudrait encoder ces informations dans un code-barres :
1
MECARD:N:Owen,Sean;ADR:76 9th Avenue, 4th Floor, New York, NY 10011;TEL:12125551212;EMAIL:srowen@example.com;;
Consultez le lien ci-dessus pour obtenir des informations complètes. Notez que ce format était généralement utilisé avec les codes QR dans le passé, mais qu’il peut également être analysé et compris lorsqu’il est encodé dans un symbole Data Matrix.
Les lecteurs doivent ouvrir une nouvelle entrée dans le carnet d’adresses, remplie avec les données fournies, et inviter l’utilisateur à ajouter un nouveau contact.
Format AU
Notez que KDDI AU propose également un format légèrement différent (http://www.au.kddi.com/ezfactory/tec/two_dimensions/address.html) pour ces informations.
BIZCARD
Nous avons également observé l’utilisation d’un format BIZCARD, mais nous n’avons pas encore trouvé de référence définitive sur ce format. On peut deviner sa structure à partir de quelques exemples ; il ressemble au format MECARD :
1
2
3
4
5
6
7
8
BIZCARD:
N:Sean;
X:Owen;
T:Software Engineer;
C:Google;
A:76 9th Avenue, New York, NY 10011;
B:+12125551212;
E:srowen@google.com;;
vCard
De nombreuses applications prennent en charge la spécification vCard. Le wiki mangstadt/ez-vcard fournit une documentation sur les différences de version et listes de propriétés entre les différentes versions de la spécification vCard.
1
2
3
4
5
6
7
8
9
10
BEGIN:VCARD
VERSION:3.0
N:Owen;Sean;;;
FN:Sean Owen
TITLE:Software Engineer
EMAIL;TYPE=INTERNET;
TYPE=WORK;
TYPE=PREF:srowen@google.com
URL;TYPE=Homepage:https://example.com
END:VCARD
SMS/MMS/FaceTime
Tout comme pour une adresse e-mail, il est possible d’encoder un code court ou un numéro SMS en créant un URI sms
. Par exemple, pour créer un lien vers le numéro 12345, il faut encoder sms:12345
. Voir RFC 5724 pour plus de détails.
De même, des URL SMSTO:
ont été observées dans la nature, mais je suis toujours à la recherche d’une spécification officielle à ce sujet. Faites suivre cela du numéro vers lequel envoyer le SMS. Nous avons entendu parler d’URI de la forme sms:[numéro]:[objet]
, et de même pour d’autres préfixes comme smsto:
.
Il semble y avoir des URI mms:
et MMSTO:
utilisées comme les URI sms:
dans la pratique. Nous supposons que le format est le même et que le lecteur doit réagir de manière similaire à une telle URI.
Les lecteurs doivent ouvrir un nouveau message SMS, prêt à être rédigé et envoyé par l’utilisateur.
1
2
3
4
5
6
7
8
9
10
11
12
13
# Send an SMS/MMS to a number
sms:+18005551212
# Send an SMS/MMS to a number with pre-filled message.
sms:+18005551212:This%20is%20my%20text%20message.
# FaceTime Video
facetime:+18005551212
facetime:me@icloud.com
# FaceTime Audio
facetime-audio:+18005551212
facetime-audio:me@icloud.com
Voir aussi…
- CSS-Tricks: iPhone Calling and Texting Links
- Apple URL Scheme Reference: SMS Links
- Apple URL Scheme Reference: FaceTime Links
- Android: Common Intents
Cartes, informations géographiques
Une URI geo
peut être utilisée pour encoder un point sur la Terre, y compris son altitude. Par exemple, pour encoder le bureau de Google à New York, situé à 40,71872 degrés de latitude nord et 73,98905 degrés de longitude ouest, à un point situé à 100 mètres au-dessus du bureau, on encoderait geo:40.71872,-73.98905,100
.
Un lecteur peut ouvrir une application cartographique locale telle que Google Maps à cet emplacement et zoomer en conséquence, ou ouvrir un lien vers cet emplacement sur un site web cartographique tel que Google Maps dans le navigateur web de l’appareil.
Des services tels que Apple Maps et Google Maps offrent des implémentations plus complètes avec davantage d’options. Elles se présentent sous la forme d’URL HTTPS normales, mais sont généralement gérées par les applications de cartographie intégrées.
Événements du calendrier
Le nouveau format iCalendar (.ics
) ainsi que l’ancien format vCalendar (.vcs
) définissent tous deux un sous-ensemble de leurs formats pour les événements. Il s’agit des vEvents.
BEGIN:VEVENT
SUMMARY:Summer+Vacation!
DTSTART:20180601T070000Z
DTEND:20180831T070000Z
END:VEVENT
Configuration du réseau Wi-Fi
Nous proposons une syntaxe telle que MECARD
pour spécifier la configuration Wi-Fi. La lecture d’un tel code permettrait, après avoir invité l’utilisateur à confirmer, de configurer le Wi-Fi de l’appareil en conséquence. Exemple :
1
WIFI:T:WPA;S:mynetwork;P:mypass;;
Paramètre | Exemple | Description |
---|---|---|
T | WPA |
Type d’authentification ; peut être WEP , WPA , WPA2-EAP ou nopass pour aucun mot de passe. Ou omettre pour aucun mot de passe. |
S | mynetwork |
SSID du réseau. Obligatoire. Mettre entre guillemets doubles s’il s’agit d’un nom ASCII, mais pouvant être interprété comme hexadécimal (par exemple ABCD ) |
P | mypass |
Mot de passe, ignoré si T est nopass (auquel cas il peut être omis). Mettez-le entre guillemets doubles s’il s’agit d’un nom ASCII, mais qu’il pourrait être interprété comme hexadécimal (par exemple ABCD ) |
H | true |
Facultatif. Vrai si le SSID du réseau est masqué. Notez que cela a également été utilisé par erreur pour spécifier la méthode de phase 2 dans les versions jusqu’à 4.7.8 / Barcode Scanner 3.4.0. S’il ne s’agit pas d’une valeur booléenne, elle sera interprétée comme une méthode de phase 2 (voir ci-dessous) pour des raisons de compatibilité ascendante. |
E | TTLS |
(WPA2-EAP uniquement) Méthode EAP, comme TTLS ou PWD . |
A | anon |
(WPA2-EAP uniquement) Identité anonyme |
I | myidentity |
(WPA2-EAP uniquement) Identité |
PH2 | MSCHAPV2 |
(WPA2-EAP uniquement) Méthode de phase 2, comme MSCHAPV2 |
L’ordre des champs n’a pas d’importance. Les caractères spéciaux \
, ;
, ,
, "
et :
doivent être échappés avec une barre oblique inversée (\
) comme dans l’encodage MECARD. Par exemple, si un SSID était littéralement foo;bar\baz
(avec des guillemets doubles faisant partie du nom du SSID lui-même), il serait encodé comme suit : WIFI:S:`foo\;bar\baz`;;
Spécifique à la plateforme
Google Play Store
Vous pouvez créer des URI qui (sur les appareils Android) renvoient directement vers le Google Play Store. Par exemple, pour encoder un lien vers une application dont le package est org.example.foo
, utilisez :
1
market://details?id=org.example.foo
iTunes et App Store
1
2
3
4
5
6
7
8
9
# Apple Music, iTunes Music Store
https://geo.itunes.apple.com/us/album/concrete-and-gold/1249068417?mt=1&app=music
https://geo.itunes.apple.com/us/album/concrete-and-gold/1249068417?mt=1&app=itunes
# iBooks Store
https://geo.itunes.apple.com/us/book/crazy-rich-asians/id588213164?mt=11
# App Store
https://itunes.apple.com/us/app/fortnite/id1261357853?mt=8
Voir aussi…
YouTube
QRencode - zbar (CLI)
Comment créer et lire des QR codes sous GNU/Linux et ce depuis notre terminal ?
La première chose à faire va être d’installer deux petites applications, à savoir QRencode pour la partie création, et ZBar pour la partie scan/lecture.
Sur Archlinux
1
sudo pacman -S qrencode zbar
Sur debian et dérivés
1
sudo apt-get install qrencode zbar-tools
Créer un QR Code
Créer un QR Code qui contient une URL.
1
qrencode "http://test-qr.org/" -o $HOME/Images/test-qr.png
L’information contenue dans le QR code est l’url
Vous n’aurez pas de retour à l’écran
Options qrencode
1
qrencode -h
Renvoie
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
qrencode version 4.0.0
Copyright (C) 2006-2017 Kentaro Fukuchi
Usage: qrencode [OPTION]... [STRING]
Encode input data in a QR Code and save as a PNG or EPS image.
-h afficher ce message.
--help afficher l'utilisation des options longues.
-o FILENAME écrit l'image dans FILENAME. Si'-' est spécifié, le résultat
sera sortie sur la sortie standard. Si -S est donné, structured
symbols sont écrits dans FILENAME-01.png, FILENAME-02.png, ...
(le suffixe est supprimé de FILENAME, si spécifié)
-r FILENAME lit les données d'entrée à partir de FILENAME.
-s NUMBER spécifier la taille du module en points (pixels). (par défaut=3)
-l {LMQH} spécifie le niveau de correction d'erreur de L (le plus bas) à H (le plus haut).
(par défaut=L)
-v NUMBER spécifie la version minimale du symbole. (par défaut=auto)
-m NUMBER spécifie la largeur des marges. (par défaut=4 (2 pour Micro))
-d NUMBER spécifie l'IAP du PNG généré. (par défaut=72)
-t {PNG,PNG32,EPS,SVG,XPM,ANSI,ANSI256,ASCII,ASCIIi,UTF8,ANSIUTF8}
spécifie le type de l'image générée. (par défaut=PNG)
-S Faire des symboles structurés. La version doit être spécifiée.
-k suppose que le texte d'entrée contient des kanji (shift-jis).
-c coder les caractères de l'alphabet en minuscules en mode 8 bits. (par défaut)
-i ignorer les distinctions de casse et n'utiliser que des majuscules.
-8 encoder des données entières en mode 8 bits. k, -c et -i seront ignorés.
-M encode dans un Micro QR Code.
-V affiche le numéro de version et les droits d'auteur du qrencode.
[STRING] les données d'entrée. S'il n'est pas spécifié, les données seront extraites de
entrée standard.
Essayez "qrencode --help" pour plus d'options.
QR code wifi
Générer un QR code pour se connecter en wifi sans avoir à saisir SSID et Mot de passe
1
2
format "WIFI:S:my-ssid;T:[WEP|WPA|WPA2];P:my-password;;"
qrencode "WIFI:T:WPA2;S:<SSID>;P:<Mot-de-passe>;;" -o fichier.png
ATTENTION : Ne pas oublier d’échapper avec le “" tous les caractères non alpha numériques
Pour créer un QRcode pour partager un réseau wifi personnel, taper la commande suivante dans un terminal :
1
2
3
qrencode -s 7 -o qr-wifi.png \
"WIFI:S:$(zenity --entry --text="Network name (SSID)" --title="Create WiFi QR");\
T:WPA2;P:$(zenity --password --title="Wifi Password");;"
Pour créer un QRcode pour partager un réseau wifi personnel dont le SSID est masqué, taper la commande suivante dans un terminal :
1
2
3
qrencode -s 7 -o qr-wifi.png \
"WIFI:S:$(zenity --entry --text="Hidden Network name (SSID)" --title="Create WiFi QR");\
T:WPA;P:$(zenity --password --title="Wifi Password");H:true;;"
Une autre méthode pour se connecter a un réseau wifi masqué est de partager uniquement le password de ce dernier et de s’y connecter manuellement en récupérant le password dans le clipboard d’Android via le QRcode scanné qui est généré de la manière suivante :
1
qrencode -s 7 -o wifi-P.png "$(zenity --password --title="Wifi Password")"
QR passer un lien vers son dépôt Nextcloud
Exemple : partager les photos de vacances
1
qrencode -t SVG -o lienPartagePhotos.svg "https://nextcloud.mon-nom-de-domaine.fr/index.php/s/B7LRrx2EA97V"
- -t SVG permet de créer une image vectorielle au format libre SVG qui a l’avantage d’être légère et facilement redimensionnable sans perte de résolution
- -o nom-de-fichier.typ permet de spécifier le nom du fichier image
- et enfin la chaîne à coder entre guillemets
QR Vcard
NTT DoCoMo a popularisé un format MECARD compact pour l’encodage des informations de contact. Par exemple, pour coder le nom Demi Parmentier, adresse 32, rue Adolphe Wurtz, 76140 LE PETIT-QUEVILLY, numéro de téléphone 0257783943, e-mail DemiParmentier@dayrep.com, on coderait ceci dans un code-barres :
1
qrencode -s 7 -o qr-vcard.png "MECARD:N:Demi Parmentier;TEL:0257783943;EMAIL:DemiParmentier@dayrep.com;ADR:32, rue Adolphe Wurtz, 76140 LE PETIT-QUEVILLY;;"
QR Numéro de téléphone
Un tel URI devrait être utilisé pour coder un numéro de téléphone. De plus, il est conseillé d’inclure des préfixes qui rendent le numéro accessible à l’international. Par exemple, pour coder le numéro de téléphone francais 0348664720, il faut coder tel:+33348664720. Ce tel URI comprend un préfixe “+33” qui le rendra utilisable en dehors de la France.
1
qrencode -s 7 -o qr-tel.png "tel:+33348664720"
QR SMS
Tout comme une adresse e-mail, on peut encoder un shortcode SMS ou un numéro en créant un sms URI. Par exemple, pour créer un lien vers le numéro 12345, on coderait sms:12345:message.
1
qrencode -s 7 -o qr-sms.png "sms:12345:message à envoyer"
QR Adresse électronique
Pour encoder une adresse e-mail comme sean@example.com, on pourrait simplement encoder sean@example.com. Cependant pour s’assurer qu’il est reconnu comme une adresse e-mail, il est conseillé de créer un mailto : URI à partir de l’adresse : mailto:sean@example.com.
1
qrencode -s 7 -o qr-email.png "mailto:sean@example.com"
Les lecteurs doivent ouvrir un message électronique vierge à l’adresse indiquée.
Notez que NTT DoCoMo a normalisé un format MATMSG plus expressif pour encoder une adresse e-mail, un sujet et un message.
1
qrencode -s 7 -o qr-email.png "MATMSG:TO:mail@server.fr;SUB:sujet;BODY:corps;;"
QR TOTP
L’algorithme de mot de passe à usage unique basé sur le temps (TOTP) est une extension de l’algorithme de mot de passe à usage unique basé sur HMAC (HOTP) qui génère un mot de passe à usage unique en prenant plutôt le caractère unique de l’heure actuelle et est utilisé dans un certain nombre de systèmes d’authentification à deux facteurs.
1
qrencode -s 7 -o qr-totp.png "otpauth://totp/VIP%20Access:VSST87192127?secret=64HZJT3E4DCBQCHQ4ICBFI2OJXQXR6RI&issuer=Emetteur"
Lire le qrcode par une application TOTP comme andOTP
Le code “secret” est la partie la plus importante du Qrcode totp ,le code barre doit être détruit après utilisation pour des raisons de sécurité…
Note : certain des caractères sont encodés (Voir Url Encoder en ligne)
QR Client Wireguard
Générer le code dans un fichier image
1
qrencode -r wg-client.conf -o wg-client.png
Générer le code qr dans la fenêtre du terminal
1
qrencode -t ansiutf8 -r wg-client.conf
Extraire contenu QR Code
Utilisation des outils zbar-tools
: zbarimg et zbarcam
Vous pouvez dès lors l’ouvrir dans votre visionneuse d’image et la scanner à l’aide d’une application dédiée pour en extraire l’information.
Vous pouvez également extraire l’information directement depuis le terminal et c’est là que ZBar entre en jeux .
1
zbarimg $HOME/Images/test-qr.png
qui devrait vous renvoyer un retour de ce type :
1
2
QR-Code:http://test-qr.org/
scanned 1 barcode symbols from 1 images in 0.01 seconds
Autre exemple
1
zbarimg -q --raw qr-wifi.png
Renvoie
1
WIFI:S:MyWifi;T:WPA;P:MyPassword!;;
Comme pour les autres applications de ce type, vous pouvez également prendre connaissance de toutes les options disponibles à l’aide de l’argument -h.
QtQR (GUI)
Comme son nom l’indique, QtQR est basé sur Qt. L’outil s’appuie sur Python et la bibliothèque python-qrtools. Vous pouvez simplement installer le programme via le gestionnaire de paquets sur Ubuntu. Pour les autres distributions, vous trouverez le code source et les paquets RPM et DEB sur la page de téléchargement du projet(en).
Sous archlinux/manjaro : yay -S qtqr
La fenêtre principale de QtQR est assez simple : En haut à gauche, dans la sélection, vous pouvez définir les données que vous souhaitez stocker dans le code QR. Pour une adresse, choisissez Contact Information (PhoneBook). Selon le type d’information, QtQR affiche les champs appropriés
QtQR peut également décoder les codes QR. Ici, le logiciel lit un code QR enregistré dans un fichier contenant les informations indiquées dans le panneau gauche de la fenêtre.
À mesure que vous remplissez les champs, le programme crée le code QR correspondant sur la droite. Vous pouvez redimensionner le code en haut à droite. Taille des pixels vous permet de définir le nombre de pixels par point carré que le code QR utilise, tandis que Taille de la marge vous permet de spécifier la taille de la marge. Error Correction vous permet de définir le niveau de correction. Une fois que vous avez défini tous les paramètres, enregistrez le code sous forme de fichier PNG en cliquant sur le bouton Save QRCode.