# RF Creditor Reference (ISO 11649)

> Source: https://docs.barcoder.ai/docs/standards/rf-creditor-reference
> research date 2026-10-06 · extracted at 2026-10-06
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

Specifications:
- [ISO 11649:2009 — Financial services — Core banking — Structured creditor reference to remittance information](https://genorma.com/en/standards/iso-11649-2009)
- [EPC069-12 v3.0 — Quick Response Code guidelines for SEPA Credit Transfer](https://europeanpaymentscouncil.eu/sites/default/files/kb/file/2022-09/EPC069-12%20v3.0%20Quick%20Response%20Code%20-%20Guidelines%20to%20Enable%20the%20Data%20Capture%20for%20the%20Initiation%20of%20an%20SCT_0.pdf)
- [Structure of the RF Creditor Reference (ISO 11649) — Finance Finland](https://www.finanssiala.fi/wp-content/uploads/2024/04/structure-of-the-rf-creditor-reference-iso-11649.pdf)

## Overview

The **RF Creditor Reference** (also *Structured Creditor Reference*, *RF reference*) is an international, creditor-assigned payment reference defined by **ISO 11649:2009** <sup>[1][1]</sup><sup>[4][4]</sup>. It consists of the letters `RF`, two check digits and up to 21 alphanumeric characters chosen freely by the creditor — at most 25 characters in total <sup>[1][1]</sup><sup>[7][7]</sup>. Its check digits use the same mod-97 algorithm as the IBAN <sup>[7][7]</sup><sup>[3][3]</sup>, and in SEPA payments it travels in the *structured* remittance-information field, letting a payee automatically reconcile an incoming credit transfer with the invoice that requested it <sup>[2][2]</sup><sup>[8][8]</sup>.

## History

ISO 11649:2009, *Financial services — Core banking — Structured creditor reference to remittance information*, was published on 16 March 2009 and is maintained by ISO/TC 68/SC 9 (information exchange for financial services) <sup>[4][4]</sup>. The reference was implemented at the end of 2008 and was first incorporated into the SEPA rulebook in version 3.2 <sup>[1][1]</sup><sup>[2][2]</sup>. The European Payments Council supports ISO 11649 for the *CreditorReferenceInformation* element of ISO 20022 messages in SEPA Credit Transfers and SEPA Direct Debits <sup>[2][2]</sup>.

In Finland, Finance Finland (then the Federation of Finnish Financial Services) published guidance in November 2016 for introducing the "global Structured Creditor Reference" in Finnish companies alongside the long-established domestic reference number <sup>[8][8]</sup>. Until 18 November 2024, Finnish creditors had to derive the RF reference from a Finnish reference number; from that date RF references may be formed freely under the ISO 11649 rules <sup>[7][7]</sup>.

## Technical specification

**Structure** — `RF` + `XX` + `c…c` <sup>[7][7]</sup><sup>[3][3]</sup>:

| Positions | Content |
|---|---|
| 1–2 | Identifier `RF` |
| 3–4 | Two numeric check digits |
| 5–25 | 1–21 alphanumeric characters (`0–9`, `A–Z`), freely formed by the creditor |

The content after the check digits is not otherwise restricted by the standard <sup>[1][1]</sup>; national conversions (e.g. Finland's former derivation rule) may impose additional limits <sup>[1][1]</sup><sup>[8][8]</sup>.

**Check-digit calculation** (as published by Finance Finland) <sup>[8][8]</sup>:

1. Append `2715` (the letters `R` = 27 and `F` = 15) and `00` to the reference body.
2. Take the result modulo 97.
3. Subtract the remainder from 98; pad to two digits with a leading zero if below 10.

Worked example: body `2348236` → `2348236271500` mod 97 = 65 → 98 − 65 = 33 → **`RF33 2348 236`** (machine format `RF332348236`) <sup>[8][8]</sup>.

**Verification** — move the first four characters to the end, convert letters to numbers (A = 10 … Z = 35), and compute modulo 97; a remainder of 1 means the check digits are correct (e.g. `RF712348231` → `2348231271571` mod 97 = 1) <sup>[8][8]</sup><sup>[3][3]</sup>. This is the ISO 7064 MOD 97-10 check used by python-stdnum <sup>[9][9]</sup>, and Finance Finland and XMLdation both state it is the same algorithm as the IBAN check digits <sup>[7][7]</sup><sup>[3][3]</sup>.

**Presentation** — on paper the reference is printed left to right in groups of four characters separated by spaces (e.g. `RF18 5390 0754 7034`); electronically it is carried without spaces <sup>[7][7]</sup><sup>[1][1]</sup><sup>[9][9]</sup>.

**Carriage in payment data:**

- **ISO 20022 / SEPA SCT & SDD** — inside *StructuredRemittanceInformation*, the RF value goes in `CdtrRefInf/Ref`; the creditor-reference type code is `SCOR` (as mandated by the EPC) and the issuer is `ISO`. Some banks recognise an RF reference purely by the `RF` prefix and valid check digits, while others also require issuer `ISO`, which the RF Expert Group recommends as best practice <sup>[2][2]</sup>.
- **[EPC QR / Stuzza](https://docs.barcoder.ai/docs/standards/epc-qr) (and its German name [Girocode](https://docs.barcoder.ai/docs/standards/girocode))** — EPC069-12 defines *AT-05 Remittance Information (Structured)* as a creditor reference of up to 35 characters for which "ISO 11649 RF Creditor Reference may be used"; it is mutually exclusive with the 140-character *Remittance Information (Unstructured)* field, and the guideline's own sample payload carries `RF18539007547034` <sup>[5][5]</sup>.
- **Unstructured fallback** — EACT's formatting rules for the 140-character unstructured SEPA field define an `/RFS/` tag for a 25-character ISO 11649 reference, but note that banks do not validate creditor references placed in the unstructured field <sup>[6][6]</sup>. Only one creditor reference (one document) can be paid per standard structured SEPA message <sup>[6][6]</sup>.

## Use cases

- **SEPA invoicing** — creditors print the RF reference on the invoice; payers (or their banks) validate it at capture; the reference is forwarded unchanged to the beneficiary's bank and reported back for automatic reconciliation in the accounts-receivable ledger <sup>[8][8]</sup><sup>[6][6]</sup>.
- **Finland** — usable for both domestic and cross-border invoices, on the bank credit-transfer form, in Finvoice e-invoices (field `EpiRemittanceInfoIdentifier`), in SEPA Direct Debit and, depending on the bank, in online-store payment buttons; version 5 of the Finnish bank barcode carries the IBAN and RF reference together (see [Virtuaaliviivakoodi](https://docs.barcoder.ai/docs/standards/virtuaaliviivakoodi)) <sup>[8][8]</sup><sup>[7][7]</sup>.
- **Switzerland / Liechtenstein QR-bill** — the [Swiss QR-bill](https://docs.barcoder.ai/docs/standards/swiss-qr-bill) supports reference type `SCOR` (RF + 2 check digits + up to 21 characters, ISO 11649) for use with a standard IBAN, alongside the domestic 27-digit `QRR` reference (which requires a QR-IBAN) <sup>[14][14]</sup><sup>[11][11]</sup>.
- **Slovenia UPN QR** — the reference field of [UPN QR](https://docs.barcoder.ai/docs/standards/upn-qr) takes a two-letter model prefix, of which `RF` is one alongside the national `SI` models (example `RF18 5390 0754 7034`) <sup>[15][15]</sup>.
- **ERP / accounting software** — Odoo generates RF references for invoices (`123456789` → `RF18 1234 5678 9`) and validates incoming ones <sup>[10][10]</sup>.

## Implementations

| Repository | Language | Stars | Last active | Role |
|---|---|---|---|---|
| [arthurdejong/python-stdnum](https://github.com/arthurdejong/python-stdnum) — `stdnum.iso11649` | Python | 599 | 2026-08 | Validate, compact and format RF references via ISO 7064 MOD 97-10 <sup>[9][9]</sup> |
| [odoo/odoo](https://github.com/odoo/odoo) — `account/tools/structured_reference.py` | Python | 54.9k | 2026-10 | Generates RF references for invoices and validates RF plus several national references (BE, DK, FI, NO/SE, NL, SI) <sup>[10][10]</sup> |
| [Shane32/QRCoder](https://github.com/Shane32/QRCoder) — `SwissQrCode` payload | C# | 5.2k | 2026-09 | Emits `SCOR` creditor references in Swiss QR-bill payloads; enforces the 25-character limit but does not verify the check digits <sup>[11][11]</sup> |
| [kmukku/php-iso11649](https://github.com/kmukku/php-iso11649) | PHP | 12 | 2023-05 | Generates and validates RF references from an existing reference of up to 21 characters (e.g. `1234512345` → `RF45 1234 5123 45`) <sup>[12][12]</sup> |
| [mharj/creditor-reference](https://github.com/mharj/creditor-reference) | TypeScript | 2 | 2026-10 | Creditor-reference builder and verification <sup>[13][13]</sup> |
| [nruotsal/node-iso11649](https://github.com/nruotsal/node-iso11649) | TypeScript | 3 | 2024-06 | ISO 11649 library for Node.js; inspiration for php-iso11649 <sup>[13][13]</sup><sup>[12][12]</sup> |

Dedicated JavaScript/TypeScript packages are small (single-digit stars); the most widely used open implementation is python-stdnum, which Odoo itself imports <sup>[9][9]</sup><sup>[10][10]</sup>.

## Comparison

| Reference | Country | Format | Check | Source |
|---|---|---|---|---|
| **RF Creditor Reference** | International (SEPA) | `RF` + 2 check digits + ≤21 alphanumerics | mod 97 (as IBAN) | <sup>[7][7]</sup><sup>[8][8]</sup> |
| [Structured Communication (OGM/VCS)](https://docs.barcoder.ai/docs/standards/structured-communication) (gestructureerde mededeling) | Belgium | `+++ddd/dddd/ddddd+++` — 10 digits + 2 check digits | first 10 digits mod 97 | <sup>[10][10]</sup> |
| Finnish reference (viitenumero) | Finland | numeric, max 20 digits, last digit a check digit | weighted 7-3-1, single digit | <sup>[8][8]</sup><sup>[10][10]</sup><sup>[1][1]</sup> |
| [KID (Norwegian payment reference)](https://docs.barcoder.ai/docs/standards/kid) | Norway | numeric, national fixed format with check digits | Luhn (as validated by Odoo for NO/SE) | <sup>[6][6]</sup><sup>[10][10]</sup> |
| [Betalingskenmerk](https://docs.barcoder.ai/docs/standards/betalingskenmerk) | Netherlands | 7 digits, or 9–14/16 digits with check digit | weighted mod 11 | <sup>[10][10]</sup> |
| Slovenian SI models (e.g. SI01) | Slovenia | `SI` + model + up to 20 digits | model-dependent, mod 11 for SI01 | <sup>[10][10]</sup><sup>[15][15]</sup> |
| Swiss QR reference (QRR) | Switzerland | 27 digits, 27th a check digit | mod 10 | <sup>[14][14]</sup><sup>[11][11]</sup> |

The choosing criterion is reach: national references are understood by domestic bank systems, while the RF reference is the one format meant to survive a cross-border SEPA payment intact and be recognised by the payee's bank as structured data <sup>[8][8]</sup><sup>[2][2]</sup>. Finance Finland notes that for purely domestic invoicing the RF reference does not increase reconciliation automation compared with the Finnish reference — the benefit comes from cross-border, particularly SEPA, payments where trading partners also use RF <sup>[8][8]</sup>. EACT likewise advises using either an ISO 11649 or a national/proprietary structured reference in the structured field when the creditor has supplied one <sup>[6][6]</sup>.

## Fun facts

- The constant `2715` appended during check-digit calculation is simply `RF` converted to numbers (R = 27, F = 15) — the same letter-to-number trick the IBAN uses for its country code <sup>[8][8]</sup>.
- Because older Finnish account-statement formats had no room for the full RF reference, Finnish banks could report it abbreviated by dropping its first four characters; when the RF reference was built from a Finnish reference number, that abbreviation is exactly the original Finnish reference <sup>[8][8]</sup>.

## Status

**Active.** ISO 11649:2009 was most recently confirmed on 27 January 2025 <sup>[4][4]</sup>. The structured creditor-reference field remains part of the EPC's QR-code guidelines (version 3.0, September 2022) <sup>[5][5]</sup>, and Finland liberalised RF formation as of 18 November 2024 <sup>[7][7]</sup>. Swiss QR-bill (`SCOR`) and Slovenian UPN QR (`RF` model) continue to accept it <sup>[14][14]</sup><sup>[15][15]</sup>.

## Sources

[1] [Creditor Reference](https://en.wikipedia.org/wiki/Creditor_Reference) — Wikipedia, accessed 2026.
[2] [RF Creditor Reference (EPC / ISO 20022 usage)](https://knowledge.xmldation.com/support/epc/ref) — XMLdation Knowledge Base, accessed 2026.
[3] [RF creditor reference](https://knowledge.xmldation.com/rf-creditor-reference) — XMLdation Knowledge Base, accessed 2026.
[4] [ISO 11649:2009](https://genorma.com/en/standards/iso-11649-2009) — Genorma standards catalogue, accessed 2026.
[5] [EPC069-12 v3.0 Quick Response Code — Guidelines to Enable the Data Capture for the Initiation of a SEPA Credit Transfer](https://europeanpaymentscouncil.eu/sites/default/files/kb/file/2022-09/EPC069-12%20v3.0%20Quick%20Response%20Code%20-%20Guidelines%20to%20Enable%20the%20Data%20Capture%20for%20the%20Initiation%20of%20an%20SCT_0.pdf) — European Payments Council, 2022, accessed 2026.
[6] [EACT Formatting Rules of SEPA "Unstructured" 140 Chrs Field for Remittance Information](https://eact.eu/Core/Documents/Wordpress_Old/docs/EACT_Standard_for_Remittance_Info.pdf) — European Association of Corporate Treasurers, 2010, accessed 2026.
[7] [Structure of the RF Creditor Reference (ISO 11649)](https://www.finanssiala.fi/wp-content/uploads/2024/04/structure-of-the-rf-creditor-reference-iso-11649.pdf) — Finance Finland, October 2023 (with 18 Nov 2024 note), accessed 2026.
[8] [Introduction of the global Structured Creditor Reference in Finnish companies](https://www.finanssiala.fi/wp-content/uploads/2021/03/Introduction_of_the_global_Structured_Creditor_Reference.pdf) — Finance Finland, November 2016, accessed 2026.
[9] [python-stdnum — stdnum/iso11649.py](https://github.com/arthurdejong/python-stdnum/blob/master/stdnum/iso11649.py) — GitHub (arthurdejong/python-stdnum), accessed 2026.
[10] [Odoo — addons/account/tools/structured_reference.py](https://github.com/odoo/odoo/blob/master/addons/account/tools/structured_reference.py) — GitHub (odoo/odoo), accessed 2026.
[11] [QRCoder — PayloadGenerator/SwissQrCode.cs](https://github.com/Shane32/QRCoder/blob/master/QRCoder/PayloadGenerator/SwissQrCode.cs) — GitHub (Shane32/QRCoder), accessed 2026.
[12] [php-iso11649](https://github.com/kmukku/php-iso11649) — GitHub (kmukku), accessed 2026.
[13] [GitHub repository search: ISO 11649 / creditor reference](https://github.com/search?q=iso+11649&type=repositories) — GitHub (mharj/creditor-reference, nruotsal/node-iso11649), accessed 2026.
[14] [Switzerland — Banking QR/Barcode Standards Report](https://docs.barcoder.ai/docs/payments/CH) — Barcoder research corpus.
[15] [Slovenia — Banking QR/Barcode Standards Report](https://docs.barcoder.ai/docs/payments/SI) — Barcoder research corpus.

[1]: https://en.wikipedia.org/wiki/Creditor_Reference
[2]: https://knowledge.xmldation.com/support/epc/ref
[3]: https://knowledge.xmldation.com/rf-creditor-reference
[4]: https://genorma.com/en/standards/iso-11649-2009
[5]: https://europeanpaymentscouncil.eu/sites/default/files/kb/file/2022-09/EPC069-12%20v3.0%20Quick%20Response%20Code%20-%20Guidelines%20to%20Enable%20the%20Data%20Capture%20for%20the%20Initiation%20of%20an%20SCT_0.pdf
[6]: https://eact.eu/Core/Documents/Wordpress_Old/docs/EACT_Standard_for_Remittance_Info.pdf
[7]: https://www.finanssiala.fi/wp-content/uploads/2024/04/structure-of-the-rf-creditor-reference-iso-11649.pdf
[8]: https://www.finanssiala.fi/wp-content/uploads/2021/03/Introduction_of_the_global_Structured_Creditor_Reference.pdf
[9]: https://github.com/arthurdejong/python-stdnum/blob/master/stdnum/iso11649.py
[10]: https://github.com/odoo/odoo/blob/master/addons/account/tools/structured_reference.py
[11]: https://github.com/Shane32/QRCoder/blob/master/QRCoder/PayloadGenerator/SwissQrCode.cs
[12]: https://github.com/kmukku/php-iso11649
[13]: https://github.com/search?q=iso+11649&type=repositories
[14]: https://docs.barcoder.ai/docs/payments/CH
[15]: https://docs.barcoder.ai/docs/payments/SI

## Deployments

Found in the following country reports (grep across `reports/countries/`):

- **BE** — [BE-belgium.md](https://docs.barcoder.ai/docs/payments/BE)
- **CH** — [CH-switzerland.md](https://docs.barcoder.ai/docs/payments/CH)
- **DE** — [DE-germany.md](https://docs.barcoder.ai/docs/payments/DE)
- **ES** — [ES-spain.md](https://docs.barcoder.ai/docs/payments/ES)
- **FI** — [FI-finland.md](https://docs.barcoder.ai/docs/payments/FI)
- **FR** — [FR-france.md](https://docs.barcoder.ai/docs/payments/FR)
- **IE** — [IE-ireland.md](https://docs.barcoder.ai/docs/payments/IE)
- **LI** — [LI-liechtenstein.md](https://docs.barcoder.ai/docs/payments/LI)
- **NL** — [NL-netherlands.md](https://docs.barcoder.ai/docs/payments/NL)
- **NO** — [NO-norway.md](https://docs.barcoder.ai/docs/payments/NO)

## Regions / aggregations not mapped to a single country

- Universal
