La réponse en bref
SPC, 0200, 1), créancier, montant et monnaie, débiteur, type de référence et référence, informations supplémentaires, trailer EPD, puis informations de facture et procédures alternatives facultatives.Ce qui distingue le Swiss QR Code d’un code QR ordinaire
Techniquement, le Swiss QR Code est un code QR conforme à la norme ISO 18004. Deux choses le rendent unique. D’abord son contenu, une structure de données fixe définie par SIX, que les applications bancaires reconnaissent grâce aux trois premières lignes. Ensuite sa marque : une croix blanche sur carré noir, entourée d’un cadre blanc, apposée au centre du code. Cette image est protégée par SIX Interbank Clearing SA et signale au payeur qu’il tient une QR-facture et non un lien vers un site.
La croix recouvre une partie des modules du code. C’est le niveau de correction d’erreur qui permet malgré tout une lecture fiable.
Les paramètres de génération
| Paramètre | Valeur imposée | Pourquoi |
|---|---|---|
| Niveau de correction d’erreur | M (environ 15 % de redondance) | Compense la croix suisse et les défauts d’impression |
| Taille maximale des données | 997 caractères, séparateurs compris | Correspond à la version 25 du code QR en codage binaire |
| Version maximale du code | 25, soit 117 × 117 modules | Découle de la taille des données et du niveau M |
| Taille des modules | 0,4 mm au minimum à l’impression | Lecture sûre par scanner et caméra |
| Dimension imprimée | 46 × 46 mm, sans la marge, toujours | Indépendante de la version : le code est généré au plus petit puis mis à l’échelle |
| Format de l’image | Vectoriel | Conserve la netteté quelle que soit la résolution |
| Marge | 4 modules (≥ 1,6 mm) selon ISO 18004, portée à 5 mm par la norme | Zone de silence pour le lecteur |
| Croix suisse | 7 × 7 mm au centre | Marque distinctive obligatoire |
La structure des données, ligne par ligne
Les données du Swiss QR Code forment une suite de valeurs séparées par des retours à la ligne, dans un ordre fixe. Une valeur absente est représentée par une ligne vide, jamais par une ligne supprimée. Le tableau suit l’ordre des Implementation Guidelines (version 2.3, adresses structurées uniquement).
| Groupe | Élément | Statut | Contenu et longueur |
|---|---|---|---|
| Header | QRType | M | SPC (Swiss Payments Code), 3 caractères |
| Version | M | 0200, 4 chiffres. Seule la version principale 02 est acceptée | |
| Coding | M | 1 : UTF-8 limité au jeu de caractères latin | |
| CdtrInf | IBAN | M | IBAN ou QR-IBAN, 21 caractères sans espaces, CH ou LI uniquement |
| Cdtr | AdrTp, Name, StrtNm, BldgNb, PstCd, TwnNm, Ctry | M / D | Créancier : S (adresse structurée), nom 70 car., rue 70, numéro 16, code postal 16 (sans code pays), localité 35, pays ISO 3166-1 |
| UltmtCdtr | 7 lignes | X | Créancier final : prévu conceptuellement, ne doit pas être renseigné (7 lignes vides) |
| CcyAmt | Amt | O | Montant 0.01 à 999999999.99, point décimal, deux décimales, sans zéros de tête, 12 positions max. |
| Ccy | M | CHF ou EUR | |
| UltmtDbtr | AdrTp, Name, StrtNm, BldgNb, PstCd, TwnNm, Ctry | O / D | Débiteur final (« Payable par ») : mêmes longueurs que le créancier ; groupe entier vide si inconnu |
| RmtInf | Tp | M | QRR, SCOR ou NON. QRR obligatoire avec un QR-IBAN |
| Ref | D | Référence QR 27 chiffres, ou Creditor Reference 5 à 25 caractères ; vide pour NON | |
| AddInf | Ustrd | O | Communication non structurée, 140 car. max., partagés avec StrdBkgInf |
| Trailer | M | EPD (End Payment Data), 3 caractères | |
| StrdBkgInf | A | Informations de facture (Swico S1), 140 car. max. partagés | |
| AltPmtInf | AltPmt (× 2 max.) | A | Procédures alternatives, 100 car. chacune |
Statuts : M obligatoire, D dépendant (obligatoire si le groupe est renseigné), O optionnel, A additionnel, X non utilisé.
Un exemple complet
SPC
0200
1
CH4431999123000889012
S
Robert Schneider AG
Rue du Lac
1268
2501
Biel
CH
1949.75
CHF
S
Pia-Maria Rutschmann-Schnyder
Grosse Marktgasse
28
9400
Rorschach
CH
QRR
210000000003139471430009017
Commande du 15 septembre 2026
EPD
//S1/10/10201409/11/260915/30/106017086/32/8.1/40/0:30
Les sept lignes vides après le pays du créancier correspondent au groupe « Créancier final », qui ne doit pas être renseigné. Le montant s’écrit 1949.75 dans le code et 1 949.75 à l’impression. La référence est encodée sans espaces.
Jeu de caractères et adresses structurées
Le code utilise l’encodage UTF-8, restreint à un jeu de caractères latin défini au chapitre 4.1.1 des Implementation Guidelines. La version 2.3 a précisé et étendu ce jeu, notamment pour les trémas et les caractères accentués courants dans les quatre langues nationales. Les caractères hors jeu doivent être remplacés avant la génération ; le portail de validation les signale.
Depuis novembre 2025, seul le type d’adresse S (structuré) est admis : rue, numéro, code postal et localité dans des champs distincts. L’ancien type K, qui acceptait deux lignes libres, a disparu de la structure de données. Un logiciel qui encode encore K produit un code rejeté.
Les procédures alternatives : eBill et TWINT
Les deux dernières lignes facultatives du code permettent d’indiquer jusqu’à deux procédures alternatives, de 100 caractères chacune. Chaque ligne commence par le nom abrégé de la procédure, puis un séparateur et les données propres au prestataire : par exemple eBill/B/… ou twint/…. Les procédures enregistrées auprès de SIX sont eBill (SIX) et TWINT (TWINT SA).
Ces données ne sont interprétées que par la procédure concernée ; la banque ne les traite pas. Sur la section paiement, elles s’impriment en bas, en 7 pt, avec le nom de la procédure en gras, tronquées avec « … » si elles dépassent la ligne. La version 2.4 a déplacé leur description dans le chapitre 3.5.5 et supprimé l’ancien chapitre 4.3.4, sans changer la syntaxe.
Le Swiss QR Code à l’écran
Le chapitre 3.8 des Implementation Guidelines, entré en vigueur le 1er janvier 2024, encadre l’affichage d’une QR-facture dans un canal en ligne (portail client, page de paiement). Dans ce cas, seule la section paiement est affichée, sans récépissé, avec toutes ses indications lisibles même sur smartphone. Le client doit pouvoir obtenir la QR-facture complète pour payer au guichet ou par ordre de paiement, et être informé que le code affiché ne constitue pas une facture papier.
Générer et valider un Swiss QR Code
Trois approches selon la taille de l’entreprise :
- un logiciel de facturation ou un ERP suisse, qui génère le code et la mise en page ;
- une bibliothèque open source (Java, .NET, PHP, Python, JavaScript, Go, LaTeX, Typst) pour les équipes qui développent leur propre facturation ;
- le générateur en ligne de la banque, pour quelques factures ponctuelles.
Validez les données du Swiss QR Code avec les outils SIX dans les formats acceptés. Contrôlez séparément le PDF final et la feuille imprimée avec le Style Guide, puis testez le traitement bancaire et le rapprochement.
Sources et références
- SIX Interbank Clearing, Implementation Guidelines suisses pour la QR-facture, version 2.3, chapitre 4 « Gestion des données du Swiss QR Code » et chapitre 6 « Paramètres pour la création du Swiss QR Code ». ↗
- SIX Interbank Clearing, Implementation Guidelines suisses pour la QR-facture, version 2.4, chapitres 3.5.5 (procédures alternatives) et 3.8 (utilisation en ligne). ↗
- ISO/IEC 18004, Information technology — Automatic identification and data capture techniques — QR Code bar code symbology specification.
- SIX, Portail de validation QR-facture. ↗