pain.001.001.03 — nine-character BIC
Un pain.001 dont le BIC de la banque du bénéficiaire fait neuf caractères. L’ISO 9362 en autorise 8 (établissement + pays + localité) ou 11 (plus un code guichet de 3 caractères) — jamais 9 ni 10. « BNPAFRPPX » est l’allure typique d’un code guichet tronqué ou complété à la main, et c’est le seul défaut du fichier que les deux couches attrapent : le XSD officiel le rejette sur son motif BIC, la couche métier sur sa longueur.
pain.001.001.03 — Invalide
Un pain.001 dont le BIC de la banque du bénéficiaire fait neuf caractères. L’ISO 9362 en autorise 8 (établissement + pays + localité) ou 11 (plus un code guichet de 3 caractères) — jamais 9 ni 10. « BNPAFRPPX » est l’allure typique d’un code guichet tronqué ou complété à la main, et c’est le seul défaut du fichier que les deux couches attrapent : le XSD officiel le rejette sur son motif BIC, la couche métier sur sa longueur.
Ce que montre ce fichier
Un pain.001 dont le BIC de la banque du bénéficiaire fait neuf caractères. L’ISO 9362 en autorise 8 (établissement + pays + localité) ou 11 (plus un code guichet de 3 caractères) — jamais 9 ni 10. « BNPAFRPPX » est l’allure typique d’un code guichet tronqué ou complété à la main, et c’est le seul défaut du fichier que les deux couches attrapent : le XSD officiel le rejette sur son motif BIC, la couche métier sur sa longueur.
| Transactions | 1 |
|---|---|
| Total | 640,00 € |
| Schéma | SEPA |
| Date contenue dans le fichier | 2026-03-06 |
Les défauts qu’il porte
- BICInvalid BIC for creditor Boulangerie Petit SARL: BNPAFRPPX
Cité mot pour mot depuis le validateur, sans reformulation.
Toutes les parties, IBAN et montants ci-dessous sont fictifs. Les IBAN sont structurellement valides — ils passent le mod-97 — mais ne correspondent à aucun compte réel.
Contenu du fichier
<?xml version="1.0" encoding="UTF-8"?>
<!--
ValidateFin sample file — SEPA Credit Transfer, pain.001.001.03, BROKEN ON PURPOSE.
Expected validation result: INVALID — the creditor agent BIC is nine characters long.
A BIC is 8 characters (institution + country + location) or 11 (plus a 3-character
branch code). NEVER 9 or 10. "BNPAFRPPX" is what a truncated or hand-padded branch
code looks like: it survives a naive length>=8 test and is rejected by the bank.
Everything else in this file is correct — IBANs pass mod-97, the totals add up.
All parties and account numbers are fictitious.
Reference page: https://validatefin.com/en/resources/samples/sepa-pain001-invalid-bic
License: CC-BY-4.0
-->
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>CT-BADBIC-2026-0001</MsgId>
<CreDtTm>2026-03-02T08:00:00</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>640.00</CtrlSum>
<InitgPty>
<Nm>ACME Corporation SA</Nm>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>PMT-BADBIC-20260302</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>640.00</CtrlSum>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdExctnDt>2026-03-06</ReqdExctnDt>
<Dbtr>
<Nm>ACME Corporation SA</Nm>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>FR7630006000011234567890189</IBAN>
</Id>
</DbtrAcct>
<DbtrAgt>
<FinInstnId>
<BIC>BNPAFRPP</BIC>
</FinInstnId>
</DbtrAgt>
<CdtTrfTxInf>
<PmtId>
<EndToEndId>E2E-BADBIC-001</EndToEndId>
</PmtId>
<Amt>
<InstdAmt Ccy="EUR">640.00</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<BIC>BNPAFRPPX</BIC>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>Boulangerie Petit SARL</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>FR1420041010050500013M02606</IBAN>
</Id>
</CdtrAcct>
<RmtInf>
<Ustrd>Facture BP-2026-0117 - fournitures</Ustrd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
Comment nous savons que ces résultats tiennent
Chaque fichier de cette bibliothèque passe dans le validateur du site à chaque build. Le résultat attendu annoncé ci-dessus est vérifié par un test automatisé : si un fichier cessait de correspondre à ce que cette page affirme, le build échouerait. Deux fixtures héritées ont été réparées ainsi avant publication : trois IBAN échouaient au mod-97 et plusieurs libellés utilisaient des caractères hors du jeu SEPA de base.
Virement SEPA (pain.001)
- pain.001.001.03 — valid credit transfer
- pain.001.001.09 — valid, hybrid address
- pain.001.001.03 — CtrlSum mismatch
- pain.001.001.03 — invalid IBAN
- pain.001.001.03 — NbOfTxs mismatch
- pain.001.001.03 — unstructured address after 2026-11-15
- pain.001.001.11 — valid, fully structured address, executed after 2026-11-15
- pain.001.001.09 — valid, two payment batches with different execution dates
- pain.001.001.03 — accent and ampersand outside the SEPA character set
- pain.001.001.03 — 250 transfers, high-volume payroll run
- pain.001.001.03 — unstructured address, executed before 2026-11-15 (warning only)