Payment QR codes EPC & Swiss QR-bill
Construisez un QR code « scanner pour payer » pour un virement SEPA, ou déposez-en une image et découvrez pourquoi une banque le refuse. Rien n’est transmis.
Qu’est-ce qu’un QR code EPC, et en quoi la QR-facture suisse est-elle différente ?
Un QR code EPC — défini par le document EPC069-12 — est le carré « scanner pour payer » imprimé sur les factures européennes. Son payload tient en douze lignes de texte : le tag de service BCD, une version, un jeu de caractères, l’identifiant SCT, puis le BIC, le nom et l’IBAN du bénéficiaire, le montant en euros, un code motif, et soit une référence créancier structurée, soit une communication libre. Le tout est plafonné à 331 octets. La QR-facture suisse relève d’une autre norme (les Implementation Guidelines de SIX) : son payload compte 31 à 34 lignes, elle n’accepte que des IBAN suisses et liechtensteinois, en francs suisses ou en euros, et sa règle structurante est l’appariement du compte et de la référence — une QR-IBAN (un IBAN dont l’identifiant d’institut est compris entre 30000 et 31999) exige une référence QRR, tandis qu’un IBAN normal l’interdit et prend une référence SCOR (ISO 11649) ou aucune.
Deux normes de QR de paiement, contrôlées selon les specs qui les définissent
Le générateur produit un payload EPC069-12 v3.1 et le rend au niveau de correction d’erreur M, comme les guidelines l’exigent. Il applique ce que la spécification dit réellement : le plafond de 331 octets porte sur des octets, pas des caractères — un nom de bénéficiaire accentué coûte donc plus que sa longueur ne le laisse croire ; la référence structurée et la communication libre sont exclusives l’une de l’autre ; et le BIC est obligatoire en version 001 mais seulement conditionnel en version 002.
Le décodeur lit les deux normes, depuis un payload collé ou depuis une image du QR code lui-même — décodée dans le canvas du navigateur, jamais envoyée. Pour une QR-facture suisse, il effectue le contrôle que les guidelines demandent explicitement à un décodeur de faire : l’appariement compte/référence, la clé modulo 10 récursive de la référence QRR, et les clés mod-97 d’une référence créancier ISO 11649. Il sait aussi qu’une facture à exactement 0.00 portant la mention « ne pas utiliser pour le paiement » est une notification légitime, pas un document cassé.
À retenir
- Le payload EPC est plafonné à 331 OCTETS du jeu de caractères déclaré — pas 331 caractères. En UTF-8, une lettre accentuée en coûte deux.
- Une QR-IBAN n’est rien d’autre qu’un IBAN dont l’identifiant d’institut (positions 5 à 9) tombe entre 30000 et 31999. Elle exige une référence QRR ; un IBAN normal l’interdit.
- La clé de la référence QRR est un modulo 10 récursif, pas le modulo 97 du monde IBAN. Les deux donnent des résultats différents, et un seul est juste.
- Une QR-facture suisse à exactement 0.00 portant « ne pas utiliser pour le paiement » est valide par construction — un validateur qui impose un minimum de 0,01 rejette un document que la norme elle-même définit.
Questions fréquentes
Quelle différence entre les versions 001 et 002 du QR code EPC ?
Une seule chose : le caractère obligatoire du BIC. En version 001, le BIC du bénéficiaire doit toujours être présent. En version 002, il n’est requis que si le prestataire de services de paiement du bénéficiaire est un participant au schéma SEPA hors EEE. Rien d’autre ne change dans la structure.
Pourquoi ma QR-facture suisse est-elle refusée alors que l’IBAN est bon ?
Presque toujours parce que le compte et le type de référence ne concordent pas. Si l’identification d’institut de l’IBAN (positions 5 à 9) est comprise entre 30000 et 31999, c’est une QR-IBAN et le type de référence doit être QRR. S’il s’agit de tout autre IBAN, une référence QR est interdite et le type doit être SCOR (référence créancier ISO 11649) ou NON. Une QR-IBAN avec SCOR, ou un IBAN normal avec QRR, ne peut pas être comptabilisée.
Un QR code EPC peut-il porter une devise autre que l’euro ?
Non. EPC069-12 définit le montant comme « le montant du virement SEPA en euros », et il n’existe aucun champ devise séparé. Le montant s’écrit EUR suivi de la valeur, entre 0,01 et 999999999,99.
Mon image de QR code est-elle envoyée à un serveur ?
Non. L’image est dessinée dans un canvas et décodée par du JavaScript dans votre navigateur. Cela compte ici plus qu’ailleurs : un QR code de paiement contient un IBAN, un montant et souvent une référence de facture.