La réponse en bref

Le Swiss QR Code est un code QR ISO 18004 généré avec le niveau de correction d'erreur M, d'au plus 997 caractères (version 25, 117 × 117 modules au maximum), imprimé à 46 × 46 mm avec une croix suisse de 7 mm au centre. Ses données sont une suite de lignes dans un ordre fixe : en-tête (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émentStatutContenu et longueur
HeaderQRTypeMSPC (Swiss Payments Code), 3 caractères
VersionM0200, 4 chiffres. Seule la version principale 02 est acceptée
CodingM1 : UTF-8 limité au jeu de caractères latin
CdtrInfIBANMIBAN ou QR-IBAN, 21 caractères sans espaces, CH ou LI uniquement
CdtrAdrTp, Name, StrtNm, BldgNb, PstCd, TwnNm, CtryM / DCré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
UltmtCdtr7 lignesXCréancier final : prévu conceptuellement, ne doit pas être renseigné (7 lignes vides)
CcyAmtAmtOMontant 0.01 à 999999999.99, point décimal, deux décimales, sans zéros de tête, 12 positions max.
CcyMCHF ou EUR
UltmtDbtrAdrTp, Name, StrtNm, BldgNb, PstCd, TwnNm, CtryO / DDébiteur final (« Payable par ») : mêmes longueurs que le créancier ; groupe entier vide si inconnu
RmtInfTpMQRR, SCOR ou NON. QRR obligatoire avec un QR-IBAN
RefDRéférence QR 27 chiffres, ou Creditor Reference 5 à 25 caractères ; vide pour NON
AddInfUstrdOCommunication non structurée, 140 car. max., partagés avec StrdBkgInf
TrailerMEPD (End Payment Data), 3 caractères
StrdBkgInfAInformations de facture (Swico S1), 140 car. max. partagés
AltPmtInfAltPmt (× 2 max.)AProcé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