Ce que contient un QR de facture électronique ZATCA et comment le lire
Les cinq champs d'un QR de facture électronique simplifiée saoudienne, le fonctionnement de l'encodage Base64 et TLV, et comment en lire un sur votre appareil sans rien envoyer.
Pourquoi le faire
Si vous faites vos achats en Arabie saoudite, vous avez déjà vu le petit QR code carré imprimé en bas d’un ticket de caisse ou d’une facture. Il découle des règles de facturation électronique de ZATCA (Autorité saoudienne de la zakat, de la fiscalité et des douanes). La plupart des gens ne le lisent jamais, mais il y a de bonnes raisons de le faire. Vous voulez peut-être vérifier que le total et la TVA d’un ticket papier correspondent à ce que le vendeur a encodé, copier le numéro de TVA du vendeur pour une note de frais, ou lire l’horodatage d’une facture dont vous n’avez qu’une photo. Si vous dirigez une petite entreprise, vous voudrez peut-être aussi voir ce que votre propre système place dans le code.
Ce code n’est pas un secret chiffré. C’est un court texte structuré, et une fois que vous connaissez sa disposition, il est facile à lire.
Comment faire, avec l’outil dédié
Deux outils fonctionnent ensemble ici : le Lecteur de QR code et codes-barres pour lire le code, et la page QR de facture ZATCA pour décoder les champs.
Ce qu’il contient. Le QR d’une facture simplifiée contient cinq champs, chacun stocké sous la forme d’une balise, d’une longueur et d’une valeur, ce que signifie « TLV » :
- Balise 1 : le nom du vendeur.
- Balise 2 : le numéro d’immatriculation à la TVA du vendeur (15 chiffres).
- Balise 3 : l’horodatage de la facture.
- Balise 4 : le total de la facture, TVA incluse.
- Balise 5 : le montant de la TVA.
Tous ces octets sont ensuite convertis en Base64, une façon d’écrire des données binaires avec seulement des lettres, des chiffres et quelques symboles, afin qu’elles circulent comme du texte brut. C’est ce texte Base64 que le QR code contient réellement.
Lisez-le. Ouvrez le Lecteur de QR code et codes-barres et touchez Ouvrir la caméra, puis visez le code. Il n’y a pas de déclencheur : la lecture se fait toute seule. Vous pouvez aussi toucher Importer une image ou Coller une image pour une photo ou une capture d’écran. Si plusieurs codes figurent dans le cadre, l’outil les énumère et vous demande d’en choisir un. La carte de résultat indique « QR de facture ZATCA » et propose Ouvrir dans le décodeur ZATCA.
Décodez-le. Sur la page QR de facture ZATCA, restez sur Décoder. Vous pouvez toucher Coller le texte pour la chaîne Base64 brute, Importer pour une photo du code, ou Scanner pour utiliser la caméra. L’outil affiche alors Total (TVA incluse), Montant de la TVA, Vendeur, Numéro de TVA et Horodatage, chacun avec un bouton de copie.
Vérifiez le calcul. Comparez le montant de la TVA au total. Au taux normal de 15 %, la TVA est égale au total moins (total ÷ 1,15) : un total de 115,00 SAR doit afficher 15,00 SAR de TVA. Si les chiffres ne concordent pas, le ticket peut concerner des articles à taux zéro ou exonérés, ou bien quelque chose ne va pas.
Créez-en un. L’onglet Générer demande le nom du vendeur, le numéro de TVA et le total de la facture. L’horodatage est prérempli avec l’heure actuelle, et le montant de la TVA se remplit automatiquement à 15 % jusqu’à ce que vous le modifiiez. Vous pouvez enregistrer l’aperçu en direct au format PNG ou SVG, ou toucher Copier le Base64.
Points de vigilance
Le décodage lit les champs ; il ne les vérifie pas. L’outil le dit dans son propre avertissement : champs décodés, mais cela ne vérifie ni le cachet ZATCA ni l’enregistrement du vendeur. Un QR qui se décode sans erreur peut tout de même être falsifié ou erroné, car n’importe qui peut fabriquer un QR avec cinq champs plausibles. Rien ici ne confirme que le vendeur est réellement immatriculé.
La phase 1 et la phase 2 sont différentes. Les cinq champs ci-dessus correspondent aux exigences de la phase 1 (génération) pour les factures simplifiées. Les phases suivantes ajoutent, en termes généraux, l’intégration aux systèmes de ZATCA et des balises cryptographiques supplémentaires, comme une signature, dans le QR. Lorsqu’un code comporte des balises au-delà des cinq premières, le décodeur les énumère sous « Champs cryptographiques présents », avec leur numéro de balise et leur taille en octets, mais il ne les contrôle pas. Le générateur ne produit que les champs de la phase 1, et l’outil prévient que la conformité complète à ZATCA ne se limite pas au QR : confirmez donc vos propres obligations de facturation auprès de ZATCA.
Tous les QR ne sont pas des factures. Si le code est un QR ordinaire, l’outil indique « Ce QR n’est pas une facture électronique ZATCA ». Si une partie est illisible, vous verrez « Données tronquées » ; la solution est une photo plus nette, avec le code entier dans le cadre. Si le numéro de TVA ne compte pas 15 chiffres, l’outil le signale.
Traitez ce lecteur comme n’importe quel lecteur de codes. Le lecteur n’ouvre jamais un lien de lui-même et, pour les liens, il signale d’abord les adresses raccourcies, non sécurisées ou trompeuses. Les lectures sont conservées sur votre appareil sous Lectures récentes, et Tout effacer les supprime. Sur certains appareils, le lecteur est intégré ; sur d’autres, il télécharge un lecteur d’environ 1 Mo, mis en cache après la première utilisation. Dans les deux cas, le décodage se fait sur votre appareil et les données de facture ne sont pas envoyées.
Les factures contiennent des informations commerciales. Un QR décodé révèle le nom d’un vendeur, son numéro de TVA et le total. Soyez prudent avant de coller le texte décodé dans des conversations ou des formulaires que vous ne maîtrisez pas.
FAQ
Le QR code est-il chiffré ?
Non. Les champs de la phase 1 sont du texte brut, encodé en TLV puis en Base64. N’importe qui peut les décoder, c’est pourquoi le décodage ne prouve rien quant à l’authenticité. Les balises cryptographiques supplémentaires des codes des phases suivantes ont un autre rôle ; cet outil les énumère mais ne les vérifie pas.
Pourquoi le total et la TVA diffèrent-ils du ticket papier ?
Vérifiez d’abord l’horodatage et les montants dans les champs décodés. Si le code indique un total et que le ticket imprimé en indique un autre, cet écart est précisément ce que vous cherchiez, et il vaut la peine d’en parler au vendeur. Rappelez-vous aussi que certains articles ne portent pas de TVA, ce qui modifie le rapport.
Puis-je vérifier avec cet outil qu’un vendeur est réellement immatriculé à la TVA ?
Non. L’outil décode les champs et peut seulement vous avertir lorsque le numéro de TVA ne compte pas 15 chiffres. La vérification de l’immatriculation est une démarche distincte, à effectuer auprès de ZATCA.
Ouvrir l'outil
Lisez ce que contient vraiment le QR d'une facture électronique, ou créez-en un
Pointez votre caméra vers un code et voyez ce qu'il dit vraiment avant d'agir