Reference🏦 Bank reconciliationAdvanced⏱ 15 min read

🗂️ France’s CFONB bank file formats

CFONB120, 160, and 240: France’s fixed-position bank file formats, with their structure, AFB codes, an annotated example, and where they stand in 2026

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.

FormatRecord lengthUse caseStatus in 2026
CFONB120120 charactersAccount statement (bank-to-customer reporting)Still widespread, challenged by camt.053
CFONB160160 charactersDomestic credit transfers and direct debits (initiation)Nearly extinct: replaced by pain.001 / pain.008 since the SEPA migration ended (2014–2016)
CFONB240240 charactersLCR / BOR submissions and reporting (French trade bills)Still the standard: the LCR has no SEPA equivalent
CFONB320320 charactersInternational transfers (initiation)Residual, replaced by pain.001
Main CFONB formats
ℹ️
This longevity comes from the installed base: thousands of French ERPs, accounting packages, and treasury management systems (TMS) have been parsing CFONB120 for three decades. It also comes from the format itself, which is lean, stable, and well suited to batch processing. Banks move to camt.053 one at a time, as they rebuild their back offices, so the two formats coexist for years.

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.

account no.narrativesigned AMOUNTreference11020304050607080901001101200000000125000{13 digits + 1 “overpunch” character{ = +0 } = −0 A…I = +1…9 J…R = −1…9Operation code (33-34)it sets debit or credit05/06 transfer · B1 direct debit · C1/C2 card1-2 04 · 3-7 bank code · 8-11 internal · 12-16 branch · 17-19 currency · 20-21 dec. · 33-34 CIB35-40 booking date · 41-42 reject · 43-48 value date · 80-81 res. · 82-88 entry no. · 89-90 exemptAmount: hidden signDebit or creditFree-text narrativeNo separator, no header: a shift of a single column corrupts the whole file. Check operation codes against the current CFONB code list.
  • 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 (LIB additional description, RCN SEPA customer reference / EndToEndId, MMO original foreign-currency amount, and so on).
  • 07 (Closing balance): the day’s closing balance, which becomes the next day’s 01.
PositionsLen.ContentExample
1-22Record code04
3-75Bank code30004
8-114Internal operation code (bank-specific)(spaces)
12-165Branch code00812
17-193ISO currency codeEUR
201Number of decimal places in the amount2
211Reserved field
22-3211Account number00012345678
33-342Interbank operation code (AFB)15
35-406Booking date (DDMMYY)100726
41-422Reject reason code(spaces)
43-486Value date (DDMMYY)100726
49-7931MeaningVIR SEPA ADYEN NV BATCH 42
80-812Reserved field
82-887Entry number0004512
89-902Exemption / unavailability flag
91-10414Signed amount: 13 digits plus an “overpunch” last character0000000125000{
105-12016Reference fieldREF7593012
Key positions in record 04 (transaction)
⚠️
Overpunch, the No. 1 CFONB120 pitfall
The last character of the amount encodes both the last digit and the sign, a legacy of punched cards: { = +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.

CodeStandard label
01Check paid
05Direct debit, TIP (payment slip), télérèglement (debit)
15Credit transfer received
18Credit transfer sent
41International transfer received
91Returned direct debit
Common interbank operation codes (excerpt)
ℹ️
The CFONB publishes the full table, and some banks add more detailed internal codes of their own (positions 8–11). The AFB code does not distinguish SCT from SCT Inst, or Core from B2B direct debits. That level of detail appears in the qualified 05 records, or in a camt.053.

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.

CFONB120 file for July 10, 2026 (annotated)
# 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 05 RCN record 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.

February 1, 2014
SEPA end date (EU Regulation 260/2012)
National formats must give way to SEPA formats for credit transfers and direct debits.
August 1, 2014
End of the grace period
Banks stop accepting CFONB160 for standard credit transfers and direct debits.
February 1, 2016
End of niche products
TIP and télérèglement move to their SEPA equivalents (SEPA TIP, direct debit).
2026
Steady state
pain/camt for SEPA, CFONB240 for trade bills, and CFONB120 still dominant for statement reporting.

Who still uses what in 2026

FlowDominant formatChallengerTrend
Daily account statement (SMEs and mid-caps)CFONB120 via EBICScamt.053Gradual 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 fallbackcamt is the norm, MT940 slowly fading
Intraday statementcamt.052 / MT942PSD2 and premium APIsAPIs are eating into file-based intraday
Initiating credit transfers / direct debitspain.001 / pain.008–Done since 2014
Trade bills (LCR/BOR)CFONB240–Stable, no replacement announced
Statement and submission formats in France: where things stand (2026)
🔑
In France, a reconciliation engine therefore needs to parse at least CFONB120 and camt.053, often MT940 for foreign accounts, and CFONB240 if the company handles trade bills. The recommended internal design is a single pivot entry model, fed by one parser per format.

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

Japan

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

Brazil

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

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

Japan

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/