ValidateFin

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.

EPC069-12 v3.1Swiss QR-billQR-IBANISO 11649100% local
100% Local

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.

QR code de virement SEPA (EPC069-12)

Renseignez le bénéficiaire et obtenez le QR code « scanner pour payer » que lisent les applications bancaires européennes. Tout est calculé dans votre navigateur.

002 — le BIC n’est requis que si la banque du bénéficiaire est un participant SEPA hors EEE.

Écrit « EUR » suivi de la valeur, ex. EUR12.30. Entre 0,01 et 999999999,99.

Taille du payload: 54 / 331

Valide

Payload

BCD
002
1
SCT

ACME SA
DE71110220330123456789
EUR12.30

Points clés

  • Le QR code EPC (EPC069-12 v3.1) est le carré « scanner pour payer » des factures européennes. Son payload fait 12 lignes et est plafonné à 331 OCTETS — pas caractères : en UTF-8, une lettre accentuée en coûte deux.
  • Référence structurée et communication libre sont exclusives l’une de l’autre : un QR de paiement porte une référence créancier ou du texte libre, jamais les deux.
  • Une QR-facture suisse utilise une QR-IBAN quand l’identifiant d’institut (positions 5 à 9 de l’IBAN) est compris entre 30000 et 31999. Une QR-IBAN exige une référence QRR ; un IBAN normal l’interdit et prend SCOR ou NON. Toute combinaison fausse est un paiement refusé.
  • La clé de la référence QRR est un modulo 10 récursif — pas le modulo 97 du monde IBAN. La référence créancier RF (ISO 11649) est contrôlée aussi.
  • Une facture suisse à 0.00 portant la mention « ne pas utiliser pour le paiement » est légitime : c’est une notification, pas une facture cassée.
  • Le générateur comme le décodeur tournent entièrement dans votre navigateur — un QR de facture porte un IBAN, il ne quitte jamais votre machine.

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.