GiroCode et QR code EPC : payer par virement en un scan — featured illustration
Technologie

GiroCode et QR code EPC : payer par virement en un scan

6 min de lecture
Créer un QR code

La facture d'un fournisseur d'énergie allemand arrive avec un petit carré à côté des coordonnées bancaires. Scanné dans l'application de la banque, il remplit tout seul le virement : bénéficiaire, IBAN, montant, référence. Rien n'a été téléchargé : toutes ces valeurs ont été imprimées dans le code au moment où la facture a été générée, et elles y seront encore dans cinq ans.

C'est un GiroCode, une chose plus étroite que la plupart des gens ne l'imaginent, et qui mérite d'être comprise précisément parce que le format coule des décisions dans l'encre.

Ce qu'est un GiroCode

Un GiroCode est un QR code ordinaire portant un contenu texte défini par le Conseil européen des paiements, dans une recommandation habituellement citée sous la référence EPC069-12. Le contenu décrit un virement SEPA en euro. Une application bancaire le lit et préremplit un formulaire de virement ; c'est toujours le payeur qui autorise le paiement. Aucun argent ne bouge parce qu'un code a été flashé.

Ce que ce n'est pas, c'est la QR-facture suisse, un autre format, sur un autre bulletin de paiement, avec une croix suisse au milieu du symbole. Une application bancaire allemande ne traitera pas l'un comme l'autre.

Le contenu est une suite de lignes dans un ordre fixe

Le contenu est du texte brut : un champ par ligne, séparés par des sauts de ligne. C'est la position qui porte le sens, donc l'ordre n'est pas négociable.

  1. Étiquette de service, toujours BCD.
  2. Version, 001 ou 002.
  3. Jeu de caractères, un chiffre.
  4. Identification, toujours SCT.
  5. BIC de la banque du bénéficiaire, obligatoire en version 001 et facultatif en 002 à l'intérieur de l'EEE.
  6. Nom du bénéficiaire, jusqu'à 70 caractères.
  7. IBAN du bénéficiaire, jusqu'à 34 caractères.
  8. Montant, écrit EUR suivi du chiffre.
  9. Code de motif, quatre caractères.
  10. Référence structurée du créancier.
  11. Communication libre, jusqu'à 140 caractères.
  12. Une note destinée au payeur.

On utilise soit la référence structurée, soit la communication libre, jamais les deux, et l'ensemble du contenu est plafonné à 331 octets. Un champ non utilisé est une ligne vide plutôt qu'une ligne absente, même si les lignes vides de fin peuvent être supprimées.

Comme la position porte le sens, un contenu presque juste échoue d'une façon intéressante. Retirez un saut de ligne et toutes les valeurs suivantes remontent d'un cran : le montant arrive là où devrait se trouver le code de motif. L'application ne voit pas un code mal formé ; elle voit un formulaire rempli autrement.

Quelles applications le lisent, et lesquelles non

Le support vit dans les applications bancaires de détail allemandes et autrichiennes, ce qui est aussi la limite de l'utilité du format. Les applications des caisses d'épargne et des banques coopératives, celles des grandes banques commerciales, et en Autriche les principales applications de détail, le gèrent toutes à des degrés variables. Comme cette liste change au fil des versions des applications, vérifiez celle que vos clients utilisent plutôt que de faire confiance à une liste publiée, y compris ce paragraphe.

Tout le reste décode le texte et n'en fait rien. Un appareil photo de téléphone ou une application de scan généraliste lit parfaitement bien un GiroCode et affiche douze lignes commençant par BCD, ce qui est correct et ne sert à rien : lancer un virement demande une application reliée à un compte bancaire. Hors de la zone euro, un GiroCode est une décoration sur une facture.

Tout ce qui compte est coulé dans le symbole

Le contenu est statique. L'IBAN, le montant et la référence font partie du motif imprimé, et rien n'est récupéré au moment du scan. Trois conséquences en découlent, et les trois prennent les émetteurs de factures au dépourvu.

Un IBAN ou un montant faux, c'est une réimpression, pas une modification. Il n'y a pas de tableau de bord derrière un GiroCode parce qu'il n'y a pas de redirection dedans : aucune des options décrites dans changer la destination d'un code imprimé sans réimprimer ne s'applique. Une URL dans un symbole peut être redirigée ; un IBAN dans un symbole est l'IBAN pour toujours.

Un montant imprimé sur une facture reste le montant que le code renseigne. Paiements partiels, avoirs et échelonnements s'en écartent tous, et le code continue de proposer le chiffre d'origine longtemps après que le solde a changé. Pour tout ce qui est payable en plusieurs fois, laisser le montant vide est plus honnête qu'imprimer un nombre qui va se périmer.

Et des codes par facture veulent dire des symboles par facture, ce qui est une fusion de données à l'intérieur du système de facturation plutôt qu'un travail de graphiste.

Le jeu de caractères est plus étroit que le format ne le suggère

Le contenu déclare un jeu de caractères sur sa troisième ligne, et un symbole QR portera n'importe quels octets qu'on lui donne. La restriction est dans le paiement en dessous, pas dans le code. Les schémas SEPA acceptent un jeu latin restreint, en gros les lettres non accentuées, les chiffres, l'espace et une courte liste de signes de ponctuation.

Les trémas et le s dur allemand en sont les victimes quotidiennes. Un nom de bénéficiaire se fait translittérer, si bien que Müller devient Mueller, que ce soit par l'émetteur ou par quelque chose plus bas dans la chaîne, et les noms écrits dans une autre écriture que le latin s'en sortent plus mal. C'est une règle du schéma de paiement et non une limite du QR, mais elle retombe sur celui qui construit le contenu, et le résultat est un nom de bénéficiaire abîmé sur le seul écran que le payeur est censé vérifier. Les textes non latins et l'encodage traitent le problème général ; ici, la restriction est plus stricte que tout ce qu'impose la symbologie.

L'autocollant substitué, c'est toute l'histoire de la sécurité

Un GiroCode ne porte aucune signature et aucune preuve de qui l'a créé : n'importe qui peut en générer un valable pour n'importe quel IBAN. L'attaque est donc physique et bon marché : une étiquette collée par-dessus le code d'une facture, d'un rappel ou d'un tronc de dons, et chaque scan suivant remplit un formulaire adressé ailleurs.

Ce qui la fait fonctionner, c'est que rien n'a l'air anormal. L'application s'ouvre, le formulaire est rempli, la référence correspond à la facture que le payeur a en main, et le seul champ qui a changé est celui que la plupart des gens ne lisent pas. Le nom du bénéficiaire et l'IBAN apparaissent bien sur cet écran de confirmation, qui est le seul contrôle du système. Il ne fonctionne que si quelqu'un le regarde.

Trois choses aident. Imprimez l'IBAN en texte à côté du code pour qu'un payeur puisse comparer les deux. Traitez toute demande de paiement qui arrive sans être attendue comme suspecte, quel que soit l'en-tête de la lettre, puisque c'est le schéma qui se cache derrière la plupart des tentatives de quishing. Et si vous êtes l'émetteur, évitez les codes adhésifs sur les documents, parce qu'un autocollant qui a sa place là apprend à vos clients qu'un autocollant est normal. La même logique, vue du côté de l'étal de marché, court dans les codes de paiement sur un panneau de stand.

Et en France ?

Le format EPC est surtout répandu en Allemagne et en Autriche, où il figure sur de nombreuses factures. En France, il reste rare, et la capacité des applications bancaires françaises à lire un GiroCode est encore inégale : vérifiez dans l'application de votre banque si une option de scan de facture ou de virement par QR code existe.

Le contexte évolue pourtant en sa faveur. Depuis 2025, le règlement européen sur les virements instantanés impose aux banques de la zone euro de proposer le virement instantané au même prix qu'un virement classique, ce qui rend le paiement par virement plus pratique pour une facture ou un don. Si vous émettez des factures vers l'Allemagne ou l'Autriche, ajouter un code EPC peut accélérer vos encaissements ; pour une clientèle française, gardez toujours l'IBAN lisible en clair à côté du code.

Où en obtenir un, et si vous en voulez vraiment

QRolling ne génère pas de codes EPC. Nos types de codes, URL, texte, Wi-Fi, vCard, e-mail, SMS, téléphone et le reste de la liste, ne produisent pas de virement SEPA. Si vous en avez besoin, deux sources sont raisonnables : votre propre application bancaire, dont plusieurs savent créer un GiroCode pour votre compte, ou un outil conçu spécifiquement pour le format EPC. Préférez un outil dédié à un générateur généraliste pour une seule raison : respecter l'ordre des champs, les retours à la ligne, le jeu de caractères et la limite de 331 octets, c'est tout le travail, et un champ de texte générique ne vérifie rien de tout cela.

Il y a aussi de bonnes chances qu'un GiroCode ne soit pas ce dont vous avez besoin. Si l'exigence est « un client scanne et paie », une page de paiement hébergée derrière un code URL atteint n'importe quel téléphone dans n'importe quel pays sans dépendre de la banque du payeur, gère les cartes autant que les virements, et produit un reçu. C'est ce que couvrent les pages sur le code de paiement, et comme chaque code créé ici est dynamique, la destination reste modifiable sur la formule payante, ce qu'un IBAN imprimé ne pourra jamais être.

Avant qu'un GiroCode n'entre dans un modèle de facture, testez le document fini dans les applications bancaires que vos clients utilisent, et imprimez l'IBAN à côté du symbole pour qu'un payeur puisse contrôler le formulaire face au papier.

Partager cet article