pain.001.001.03 — nine-character BIC
A pain.001 whose creditor agent BIC is nine characters long. ISO 9362 allows 8 (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, and it is the one defect in this file that both layers catch: the official XSD rejects it on its BIC pattern, and the rulebook layer rejects it on its length.
pain.001.001.03 — Invalid
A pain.001 whose creditor agent BIC is nine characters long. ISO 9362 allows 8 (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, and it is the one defect in this file that both layers catch: the official XSD rejects it on its BIC pattern, and the rulebook layer rejects it on its length.
What this file shows
A pain.001 whose creditor agent BIC is nine characters long. ISO 9362 allows 8 (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, and it is the one defect in this file that both layers catch: the official XSD rejects it on its BIC pattern, and the rulebook layer rejects it on its length.
| Transactions | 1 |
|---|---|
| Total | €640.00 |
| Scheme | SEPA |
| Date in the file | 2026-03-06 |
The defects it carries
- BICInvalid BIC for creditor Boulangerie Petit SARL: BNPAFRPPX
Quoted verbatim from the validator, not paraphrased.
Every party, IBAN and amount below is fictitious. The IBANs are structurally valid — they pass the mod-97 check — but they belong to no real account.
File content
<?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>
How we know these results hold
Every file in this library is run through the site's own validator on each build. The expected result stated above is asserted by an automated test — if a file stopped matching what this page claims, the build would fail. Two inherited fixtures were repaired this way before publication: three IBANs failed the mod-97 check and several names used characters outside the basic SEPA character set.
SEPA Credit Transfer (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)