Overview: the legacy of French bank file transfer
As early as the 1980s, the CFONB (Comité français d’organisation et de normalisation bancaires, France’s banking standards body) standardized a set of fixed-position exchange formats. Each data item occupies specific columns in a fixed-length record. These formats originally traveled over ETEBAC (discontinued in 2011 and replaced by EBICS), and in 2026 they still carry a large share of bank-to-corporate traffic in France.
| Format | Record length | Use case | Status in 2026 |
|---|---|---|---|
| CFONB120 | 120 characters | Account statement (bank-to-customer reporting) | Still widespread, challenged by camt.053 |
| CFONB160 | 160 characters | Domestic credit transfers and direct debits (initiation) | Nearly extinct: replaced by pain.001 / pain.008 since the SEPA migration ended (2014–2016) |
| CFONB240 | 240 characters | LCR / BOR submissions and reporting (French trade bills) | Still the standard: the LCR has no SEPA equivalent |
| CFONB320 | 320 characters | International transfers (initiation) | Residual, replaced by pain.001 |
CFONB120 structure: four record types
A CFONB120 file is a sequence of records of exactly 120 characters, with no field separators: only position matters. For each account and each day, the sequence is one 01 record (opening balance), zero to n 04 transaction records, each optionally followed by 05 supplementary records, then one 07 record (closing balance). A single file can chain several accounts and days.
- 01 (Opening balance): repeats the previous day’s closing balance.
- 04 (Transaction): one entry, with dates, operation code, description, signed amount, and reference.
- 05 (Supplementary information): 0 to n per transaction, each with a qualified field (
LIBadditional description,RCNSEPA customer reference / EndToEndId,MMOoriginal foreign-currency amount, and so on). - 07 (Closing balance): the day’s closing balance, which becomes the next day’s 01.
| Positions | Len. | Content | Example |
|---|---|---|---|
| 1-2 | 2 | Record code | 04 |
| 3-7 | 5 | Bank code | 30004 |
| 8-11 | 4 | Internal operation code (bank-specific) | (spaces) |
| 12-16 | 5 | Branch code | 00812 |
| 17-19 | 3 | ISO currency code | EUR |
| 20 | 1 | Number of decimal places in the amount | 2 |
| 21 | 1 | Reserved field | |
| 22-32 | 11 | Account number | 00012345678 |
| 33-34 | 2 | Interbank operation code (AFB) | 15 |
| 35-40 | 6 | Booking date (DDMMYY) | 100726 |
| 41-42 | 2 | Reject reason code | (spaces) |
| 43-48 | 6 | Value date (DDMMYY) | 100726 |
| 49-79 | 31 | Meaning | VIR SEPA ADYEN NV BATCH 42 |
| 80-81 | 2 | Reserved field | |
| 82-88 | 7 | Entry number | 0004512 |
| 89-90 | 2 | Exemption / unavailability flag | |
| 91-104 | 14 | Signed amount: 13 digits plus an “overpunch” last character | 0000000125000{ |
| 105-120 | 16 | Reference field | REF7593012 |
{ = +0, A…I = +1…+9, } = −0, J…R = −1…−9. So 0000000125000{ means +€12,500.00 and 0000000018405} means −€1,840.50. A parser that reads this field as an integer gets both the last digit and the sign wrong, and produces incorrect balances.AFB interbank operation codes
The two-character code in positions 33–34 identifies the type of transaction, based on the interbank table maintained by the CFONB (inherited from the AFB, the Association française des banques). It is the functional ancestor of the ISO 20022 Bank Transaction Code, though far less granular.
| Code | Standard label |
|---|---|
01 | Check paid |
05 | Direct debit, TIP (payment slip), télérèglement (debit) |
15 | Credit transfer received |
18 | Credit transfer sent |
41 | International transfer received |
91 | Returned direct debit |
Full annotated CFONB120 example
The business day is July 10, 2026, with the same account and the same transactions as the camt.053 example in the previous topic, so you can read one statement in both formats. It shows an Adyen payout of €12,500.00 (code 15, with a 05 record carrying the EndToEndId) and a direct debit of €1,840.50 (code 05). Lines starting with # are annotations. The others are actual 120-character records, with trailing padding spaces trimmed here for readability.
# Note: each record is exactly 120 characters long in the actual
# file; padding spaces up to position 120 are trimmed here.
# --- Record 01: opening balance on July 9, 2026 ---------------------------
# pos 1-2 = 01; pos 3-7 bank 30004; pos 12-16 branch 00812; pos 17-19 EUR
# pos 22-32 account; pos 35-40 date 090726; pos 91-104 amount +152,340.25
# (0000001523402 + E: E = last digit 5, credit sign)
0130004 00812EUR2 00012345678 090726 0000001523402E
# --- Record 04: credit transfer received (Adyen payout) --------------------
# pos 33-34 = 15 (transfer received); booking/value dates 100726;
# description pos 49-79; entry no. 0004512; amount +12,500.00 (...125000 + {)
# reference pos 105-120 = REF7593012
0430004 00812EUR2 0001234567815100726 100726VIR SEPA ADYEN NV BATCH 42 0004512 0000000125000{REF7593012
# --- Record 05: supplement to the previous transaction ---------------------
# pos 46-48 = RCN qualifier (customer reference); field 49-118 = full SEPA
# EndToEndId, not truncated: the matching key for the settlement report
0530004 00812EUR2 0001234567815100726 RCNADYEN-SETTLEMENT-2026-BATCH42
# --- Record 04: SEPA direct debit charged ----------------------------------
# pos 33-34 = 05 (direct debit); amount -1,840.50 (0000000018405 + });
# reference pos 105-120 = RUM-FONCDOCKS-00 (mandate ref. cut to 16 chars!)
0430004 00812EUR2 0001234567805100726 100726PRLV SEPA FONCIERE DES DOCKS 0004513 0000000018405}RUM-FONCDOCKS-00
# --- Record 07: closing balance on July 10, 2026 --------------------------
# 152,340.25 + 12,500.00 - 1,840.50 = 162,999.75 (0000001629997 + E)
0730004 00812EUR2 00012345678 100726 0000001629997E- The integrity check is the same as for MT940: opening balance + the sum of signed transactions = closing balance, and one day’s 07 = the next day’s 01.
- The 16-character reference field (positions 105–120) suffers from the same truncation as the MT940
:61:field, which is why the 05RCNrecord was added for SEPA. - Compare it with the equivalent camt.053: the same data, but in self-describing XML instead of positions you have to know by heart.
CFONB240 (LCR/BOR) and CFONB160 (the legacy format)
CFONB240 structures the submission and reporting of trade bills: the lettre de change relevé (LCR, a paperless bill of exchange) and the billet à ordre relevé (BOR, a paperless promissory note). It covers bills submitted for collection or discounting, statements of bills payable, and outcome notices (paid, or unpaid with a reason). Trade bills are a purely domestic instrument, and no SEPA format replaces them. In 2026, CFONB240 is still the operational standard for companies that use LCRs, in construction, wholesale trade, and manufacturing.
CFONB160 carried the initiation of domestic credit transfers and direct debits (RIB bank details, France’s domestic account identifiers, in fixed positions over 160 characters). The SEPA migration killed it. Since the regulatory deadlines of 2014–2016, files have been submitted as pain.001 (credit transfers) and pain.008 (direct debits, with UMR mandate management). It survives only in old systems on borrowed time, never in a workflow built after the migration.
Who still uses what in 2026
| Flow | Dominant format | Challenger | Trend |
|---|---|---|---|
| Daily account statement (SMEs and mid-caps) | CFONB120 via EBICS | camt.053 | Gradual switch, driven by TMS platforms and banks’ new PSD2 APIs |
| Account statement (large multinational groups) | camt.053 (via EBICS, FileAct, or API) | MT940 as international fallback | camt is the norm, MT940 slowly fading |
| Intraday statement | camt.052 / MT942 | PSD2 and premium APIs | APIs are eating into file-based intraday |
| Initiating credit transfers / direct debits | pain.001 / pain.008 | – | Done since 2014 |
| Trade bills (LCR/BOR) | CFONB240 | – | Stable, no replacement announced |
French banks usually bill each reporting subscription separately, so CFONB120 and camt.053 appear as two line items. A migration therefore means budgeting for dual reporting during a quarter of parallel testing, then canceling the old feed once the new format is validated.
Elsewhere in the world. The same mechanism, elsewhere.
The national fixed-position bank file format
In Japan, the CFONB equivalent is the Zengin format defined by the Japanese Bankers Association. It uses fixed-position records of 120 characters, in four types identified by the first byte: header (1), data (2), batch trailer (8), and end of file (9).
全国銀行協会 / Japanese Bankers Association, “適用業務およびレコード・フォーマット”, https://www.zenginkyo.or.jp/fileadmin/res/abstract/efforts/system/jba_protocol_pc.pdf
In Brazil, the banking federation FEBRABAN publishes the Layout Padrão CNAB 240, which uses 240-position records for data exchange between banks and companies. Version 10.11 is dated August 21, 2023.
FEBRABAN, “Layout 240”, https://portal.febraban.org.br/pagina/3053/1177/pt-br/layout-240
In the US, the nationwide standard file is the Nacha format, governed by the Nacha Operating Rules and submitted to the Federal Reserve’s FedACH service. The specification is maintained by a trade association, not by a national banking standards committee.
Federal Reserve Financial Services, “FedACH Services”, https://www.frbservices.org/financial-services/ach
The channel a company uses to send files to its bank
Germany, Switzerland, and Austria use the same channel as France: EBICS. Its specification is managed by EBICS SC, a company that brings together the CFONB (France), Die Deutsche Kreditwirtschaft (Germany), SIX (Switzerland), and Payment Services Austria. ETEBAC’s successor has thus become a European multibank standard, not a French-only protocol.
EBICS SC, https://www.ebics.org/en/
The US has no EBICS equivalent. ACH files reach the Federal Reserve over its proprietary FedLine channels (FedLine Web, FedLine Command, or FedLine Direct), depending on volume and level of automation.
Federal Reserve Financial Services, “FedACH Services”, https://www.frbservices.org/financial-services/ach
In Japan, domestic credit transfers run over the Zengin System, the national network operated by the Japanese Banks’ Payment Clearing Network (Zengin-Net). Zengin-Net also runs the Zengin EDI System, which lets the sender attach business information (payment and invoice numbers) to a transfer, ready to use for cash application.
Japanese Banks’ Payment Clearing Network (Zengin-Net), https://www.zengin-net.jp/en/zengin_net/