La réponse en bref
Ce qu’il faut produire
Générer une QR-facture, c’est enchaîner trois traitements distincts.
| Étape | Contenu | Référence normative |
|---|---|---|
| 1. Données | Construire la chaîne de 30 lignes environ : en-tête SPC / 0200 / 1, créancier, montant, débiteur, référence, informations, EPD, S1, procédures alternatives |
Implementation Guidelines, chapitre 4 |
| 2. Code | Encoder la chaîne en QR code ISO 18004, niveau M, UTF-8, plus petite version, puis ajouter la croix suisse ; exporter en vectoriel | Implementation Guidelines, chapitre 6 |
| 3. Mise en page | Composer récépissé et section paiement : zones, polices, tailles, libellés dans la langue choisie, champs vides avec coins, ciseaux ou perforation | Style Guide |
Le guide sur le Swiss QR Code détaille la structure des données et donne un payload complet.
Les bibliothèques open source
Toutes les bibliothèques ci-dessous produisent la section paiement complète (souvent en SVG ou PDF) et non seulement le code. Vérifiez, avant de choisir, la date de la dernière version et la prise en charge des adresses structurées seules (version 2.3).
| Langage | Bibliothèque | Points forts |
|---|---|---|
| Java | SwissQRBill (manuelbl) | Génération et décodage, validation complète, sorties SVG, PDF et PNG, développée conjointement avec la version .NET |
| .NET | SwissQRBill.NET (manuelbl) | Même API que la version Java, intégration dans les ERP Windows |
| PHP | php-swiss-qr-bill (sprain) | Très répandu dans les boutiques et logiciels web suisses, sorties HTML, SVG et PDF (FPDF, TCPDF) |
| Python | swiss-qr-bill (claudep) | Ligne de commande et classe QRBill, sortie SVG, intégration Django |
| JavaScript / TypeScript | swissqrbill (schoero) | Node.js et navigateur, sorties SVG et PDF (PDFKit), utile pour les portails et applications web |
| LaTeX | qrbill (CTAN) | Pour les factures composées en LaTeX |
| Typst | payqr-swiss | Pour les documents Typst |
Ces projets sont maintenus par la communauté, sous licence MIT pour la plupart. Aucun n’est certifié par SIX, qui ne certifie personne : c’est votre sortie qui est validée, pas la bibliothèque.
Points de vigilance d’implémentation
Données
- Adresses : seules les adresses structurées (type S) sont admises ; rue et numéro sont deux éléments, le code postal est sans pays, le pays est un code ISO 3166-1. Un débiteur est soit complet, soit absent (groupe vide).
- Couple compte-référence : refusez à la génération
QRRsans QR-IBAN (IID 30000–31999) etSCORouNONavec un QR-IBAN. Depuis la version 2.4, refusez aussiQRRen EUR. - Références : 27 chiffres pour la référence QR, contrôle modulo 10 récursif calculé et non saisi ; 5 à 25 caractères pour la Creditor Reference, contrôle mod 97-10 ; encodage sans espaces.
- Montant : chaîne décimale avec point, deux décimales, sans séparateur de milliers ni zéros de tête ; entre 0.01 et 999999999.99.
- 140 caractères partagés entre
UstrdetStrdBkgInf: tronquez le texte libre, jamais S1. - Jeu de caractères : filtrez ou remplacez les caractères hors du jeu latin autorisé avant l’encodage ; les émojis et les guillemets typographiques exotiques sont fréquents dans les noms saisis par les clients.
- Créancier final : sept lignes vides ; ne renseignez jamais ce groupe.
Code
- Niveau de correction M forcé, quelle que soit la valeur par défaut de la bibliothèque QR.
- Plus petite version possible, puis mise à l’échelle à 46 × 46 mm en vectoriel ; jamais de bitmap.
- Croix suisse conforme au modèle de SIX, centrée ; les bibliothèques spécialisées l’ajoutent.
- Marge blanche de 5 mm autour du code dans la section paiement.
Mise en page
- Polices Arial, Frutiger, Helvetica ou Liberation Sans incorporées dans le PDF (Liberation Sans est libre et métriquement compatible avec Arial).
- Libellés issus de l’Annexe D des Implementation Guidelines, dans les cinq langues, jamais traduits librement.
- Titres masqués lorsque la valeur est absente ; coins noirs pour montant ou débiteur laissés vides.
- Ligne et ciseaux en PDF ; positions calées sur la perforation pour le papier.
Tester
- Tests unitaires sur les chiffres de contrôle (référence QR, Creditor Reference, IBAN) avec des valeurs connues :
210000000003139471430009017est valide,RF18539007547034est valide,CH4431999123000889012est un QR-IBAN. - Tests de non-régression : comparer le texte décodé du code à une référence pour chaque cas de facture (montant libre, débiteur absent, EUR, S1, procédure alternative).
- 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.
- Validateur Swico pour la syntaxe S1.
- Scan réel dans deux applications bancaires, sur écran et sur papier.
Suivre la norme
SIX publie les évolutions des Implementation Guidelines et leur calendrier de mise en œuvre. Abonnez-vous aux annonces du centre de téléchargement, lisez la documentation des modifications et planifiez la mise à jour de la bibliothèque et de vos tests. Le guide des versions résume les échéances en cours : version 2.4 le 14 novembre 2026, fin du maintien de la 2.3 en novembre 2027.
Sources et références
- SIX Interbank Clearing, Implementation Guidelines suisses pour la QR-facture, version 2.3, chapitre 4 (données) et chapitre 6 (paramètres du code). ↗
- SIX, Portail de validation QR-facture. ↗
- SwissQRBill (Java) et SwissQRBill.NET, Manuel Bleichenbacher, licence MIT. ↗
- php-swiss-qr-bill (PHP), Manuel Reinhard, licence MIT. ↗
- swiss-qr-bill (Python), Claude Paroz, licence MIT. ↗
- swissqrbill (JavaScript, Node.js et navigateur), Roger Schönbächler, licence MIT. ↗
- Swico, matériel de support et validateur pour développeurs (swiss-qr-invoice.org). ↗