# Betalingskenmerk

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

Specifications:
- [Payment reference — Betaalvereniging Nederland (Dutch Payments Association)](https://www.betaalvereniging.nl/en/knowledge-base/special-accounts-and-services/payment-reference/)
- [Betalingskenmerk bepaling v1.5 — Belastingdienst](https://odb.belastingdienst.nl/wp-content/uploads/2025/07/Specificatie-Betalingskenmerk_bepaling_1.5.pdf)
- [NL IG SEPA Credit Transfer Customer-to-Bank (2023 v1.0) — Betaalvereniging Nederland](https://www.betaalvereniging.nl/en/wp-content/uploads/sites/4/2025/11/Betaalvereniging-NL_IG-C2B-SEPA-Credit-Transfer_2023_v1.0.pdf)
- [Elfproef (acceptgiro-elfproef) — Wikipedia (nl)](https://nl.wikipedia.org/wiki/Elfproef)

## Overview

The **betalingskenmerk** ("payment reference") is the Netherlands' domestic structured payment reference: a purely numeric string of **7 to 16 digits** that may include a **check digit** and a **length code**, used so that a payee can automatically match an incoming account-to-account transfer to an invoice or tax assessment <sup>[1][1]</sup>. It originated as the reference printed on the paper **acceptgiro** form, whose 16-digit kenmerk typically encoded customer and invoice numbers for automated processing <sup>[6][6]</sup>. Although the acceptgiro itself was abolished on **1 June 2023** <sup>[6][6]</sup><sup>[8][8]</sup>, the betalingskenmerk lives on in online/mobile banking, in SEPA credit-transfer files (as a structured creditor reference with issuer `CUR`) and on Belastingdienst tax assessments <sup>[1][1]</sup><sup>[3][3]</sup><sup>[4][4]</sup>.

## History

- **Acceptgiro lineage.** The acceptgiro evolved from a punch-card form introduced in **1977**, replaced by the blue acceptgiro at the end of **1985**, the yellow *Euro-acceptgiro* on **1 January 2002** and the *IBAN-acceptgiro* on **1 February 2014** <sup>[6][6]</sup>. Issuance was regulated by **Acceptgiro B.V.**, a subsidiary of **Currence**, the acceptgiro's product owner <sup>[6][6]</sup><sup>[8][8]</sup>. The pre-printed form carried the debtor name, account number, amount and the betalingskenmerk <sup>[6][6]</sup>.
- **Peak.** Over **171 million** paper acceptgiros were sent in 2008 <sup>[6][6]</sup>; a consumer-programme account puts the historical peak at about 300 million transactions a year <sup>[9][9]</sup>.
- **The 2019 deadline that slipped.** The paper acceptgiro was originally to exist "until at most 1 January 2019" <sup>[11][11]</sup>. In **May 2017** Currence, after consulting banks and users and with the approval of the *Maatschappelijk Overleg Betalingsverkeer*, postponed that end date **indefinitely**, because migration was slower than expected and use by charities and some consumers remained high <sup>[7][7]</sup>.
- **Replacement standard.** On **15 June 2018** Betaalvereniging Nederland and its members introduced the standard **Betaalinstructie** — a uniform invoice layout giving amount, beneficiary name, IBAN and payment reference, plus a QR code for banking apps — which accepts either the 16-digit Dutch betalingskenmerk or an ISO-standard reference <sup>[10][10]</sup>.
- **Final end.** Currence announced the definitive end of the acceptgiro after "more than forty years": issuers stopped sending acceptgiros on **1 March 2023** and banks stopped processing them on **1 June 2023** <sup>[8][8]</sup><sup>[9][9]</sup>. By then use was falling about 30% a year and over 90% of recipients paid via internet or mobile banking instead <sup>[8][8]</sup>.

## Technical specification

**General form.** 7 to 16 numeric digits, optionally with a check digit and a length code; banks can verify the check and warn the payer of typing errors <sup>[1][1]</sup>. Betaalvereniging's example of a valid reference is `5000 0567 8901 2345`, whose first digit is the check digit computed over all the other digits <sup>[1][1]</sup>.

**Structure by length** (per the acceptgiro rules as summarised on Wikipedia) <sup>[2][2]</sup>:

| Length | Layout |
|---|---|
| 7 digits | No check digit or other control information |
| 9–15 digits | Position 1 = check digit; position 2 = **length code**; rest = reference |
| 16 digits | Position 1 = check digit; positions 2–16 = reference (no length code) |

Permitted length codes are `0` (10), `1` (11), `2` (12), `7` (7), `8` (8) and `9` (9), giving the number of following reference digits; e.g. `12 2345 3462 2567` has check digit `1` and length code `2` (twelve digits follow) <sup>[2][2]</sup>.

**Check digit — the "acceptgiro-elfproef" (weighted modulus 11)** <sup>[2][2]</sup>:

1. Multiply the reference digits, starting from the right, by the weights **2, 4, 8, 5, 10, 9, 7, 3, 6, 1**, repeating the cycle as needed.
2. Sum the products to *S*; take *R* = *S* mod 11.
3. Check digit *C* = 11 − *R*, except that a result of **11 becomes 0** and **10 becomes 1**.

Worked example: for `1234567`, *S* = 153 = 13 × 11 + 10, so *R* = 10 and *C* = 1, giving `11234567` <sup>[2][2]</sup>. (The weights are the successive powers of 2 modulo 11.) The same cycle appears in an open-source PHP validator, which pads shorter bodies to 15 digits and uses weights 2,4,8,5,10,9,7,3,6,1,2,4,8,5,10 <sup>[14][14]</sup>. Applying this algorithm to the Belastingdienst's published examples (below) reproduces their check digits — e.g. `2036 0000 1630 1110`, `9253 5862 0800 1120`, `4036 0000 1700 0001` <sup>[3][3]</sup>.

**Belastingdienst (Dutch Tax Administration) profile.** The tax authority's specification (v1.0 of 11 May 2005, v1.5 of 20 April 2023) defines the betalingskenmerk as **16 numeric positions including the check digit**, formed by converting the assessment/return number (*aanslagnummer*) <sup>[3][3]</sup>:

- For most tax types (*middelen*): pos 1 = check digit (modulus-11), pos 2–9 = first 8 digits of the BSN/RSIN, pos 10–11 = tax-type code (`B-MIDDEL`), pos 12–16 = year/period/sequence (`B-JAVO`) <sup>[3][3]</sup>.
- For corporate income tax (*Vennootschapsbelasting*, middel `V`): pos 2–7 = RSIN positions 3–8, pos 8 = year, pos 9 = kind, pos 10–11 = code derived from the RSIN prefix (00 → 74; 80–84 kept; 85–89 → 92–96), pos 12–15 = period, pos 16 = `0` <sup>[3][3]</sup>.
- Example codes for pos 10–11 include `70` income tax, `71` protective assessments, `24` rent benefit, `25` healthcare benefit, `78`/`87` motor-vehicle holder taxes and `85`/`86` Eurovignette <sup>[3][3]</sup>.
- Some assessments (e.g. certain environmental levies) are not converted by formula but receive a **random betalingskenmerk** whose mapping is held in internal tables <sup>[3][3]</sup>.

**Carriage in SEPA / ISO 20022.** The Dutch Payments Association's customer-to-bank implementation guideline for SEPA Credit Transfer (`pain.001.001.09`, 2023 v1.0, November 2022) adds an NL usage rule: when the *Dutch Structured Communication* is used, `RmtInf/Strd/CdtrRefInf/Tp/Issr` must be **`CUR`**, and `CdtrRefInf/Ref` must comply with the betalingskenmerk rules <sup>[4][4]</sup>. On the receiving side, a correct reference is reported as **structured remittance information** and an incorrect one as **unstructured** remittance information <sup>[1][1]</sup>.

**Carriage in the EPC QR code.** The [EPC QR / Stuzza](https://docs.barcoder.ai/docs/standards/epc-qr) payload (EPC069-12 v3.0, 13 September 2022) has an optional *Remittance Information (Structured)* element of up to **35 alphanumeric characters** described as "Creditor Reference (ISO 11649 RF Creditor Reference may be used)", mutually exclusive with the 140-character unstructured remittance element; the whole payload is limited to 331 bytes <sup>[5][5]</sup>. A 16-digit betalingskenmerk fits that length, but implementers differ: one Dutch open-source bookkeeping tool deliberately accepts only ISO 11649 `RF` references in the structured slot and places any other reference — explicitly including a Dutch betalingskenmerk — in the unstructured text <sup>[15][15]</sup>.

## Use cases

- **Tax payments.** Every Belastingdienst assessment or return has a 16-digit betalingskenmerk derived from the aanslagnummer, covering income tax, VAT, payroll tax, corporate tax, motor-vehicle taxes, Eurovignette and benefit (*toeslagen*) recoveries <sup>[3][3]</sup>.
- **Invoices from companies and charities.** The kenmerk was the reconciliation key on acceptgiros, used notably by charities <sup>[7][7]</sup>, and continues on invoices laid out per the Betaalinstructie standard <sup>[10][10]</sup>.
- **Bulk corporate payments.** Payment files sent to Dutch banks carry it as a structured creditor reference with issuer `CUR` <sup>[4][4]</sup>; an open-source ISO 20022 toolkit ships a validation overlay enforcing exactly this (`Issr` = `CUR`, `Ref` matches 16 digits) <sup>[13][13]</sup>.
- **Reconciliation / reporting.** Correct references flow through to the payee's statement as structured remittance data, enabling automatic matching of payments to invoices and assessments <sup>[1][1]</sup>.

## Implementations

No widely adopted, dedicated betalingskenmerk library was found on GitHub; support appears inside larger payment or bookkeeping projects:

- **[sebastienrousseau/pain001](https://github.com/sebastienrousseau/pain001)** — Python, 49 stars, active October 2026. ISO 20022 `pain.001`/`pain.008` generator and validator with an `nl.betalingskenmerk` overlay enforcing issuer `CUR` and a 16-digit `[0-9]{16}` reference (format only; no check-digit rule) <sup>[13][13]</sup>.
- **[EmileBons/PaymentReferenceValidator](https://github.com/EmileBons/PaymentReferenceValidator)** — PHP (Yii2), 0 stars, last pushed March 2015. Validates both the Dutch betalingskenmerk (acceptgiro mod-11 weights) and Belgium's *gestructureerde mededeling* (mod 97) <sup>[14][14]</sup>.
- **[shipdocs/boekhoudenvoorniks](https://github.com/shipdocs/boekhoudenvoorniks)** — TypeScript, 0 stars, active October 2026. Local-first Dutch bookkeeping app whose EPC QR encoder routes non-RF references (including betalingskenmerken) to the unstructured field <sup>[15][15]</sup>.
- Caution: at least one small tax-kenmerk helper ([KingOfTheAce2/belastingkenmerk-hulp](https://github.com/KingOfTheAce2/belastingkenmerk-hulp), TypeScript, 0 stars) computes the check digit with linear weights 2…16 <sup>[16][16]</sup>; that scheme does not reproduce the check digits of the Belastingdienst's own examples (e.g. it yields 10 rather than 2 for `2036 0000 1630 1110`) <sup>[3][3]</sup>, whereas the acceptgiro weight cycle does <sup>[2][2]</sup>.

## Comparison

**Betalingskenmerk vs. ISO 11649 RF creditor reference ([RF Creditor Reference (ISO 11649)](https://docs.barcoder.ai/docs/standards/rf-creditor-reference)).** Betaalvereniging documents both side by side <sup>[1][1]</sup>:

| | Betalingskenmerk | ISO 11649 RF reference |
|---|---|---|
| Characters | Digits only, 7–16 | Letters and digits, 5–25 |
| Prefix | None | `RF` + two check digits (e.g. `RF98 REF 1234`) |
| Check | Single leading check digit (acceptgiro mod-11) on all but 7-digit references <sup>[2][2]</sup> | Two check digits per ISO 11649 |
| Scope | Dutch domestic | International / European transfers |
| ISO 20022 issuer | `CUR` (NL usage rule) <sup>[4][4]</sup> | Standard SCOR creditor reference |

The Betaalinstructie lets invoice senders choose the familiar 16-digit Dutch reference or the ISO reference for European transfers <sup>[10][10]</sup>. Choose the betalingskenmerk where payers are Dutch and existing back-office matching depends on it (e.g. tax assessments <sup>[3][3]</sup>); choose RF where payers are cross-border or where tools such as EPC QR generators only accept RF in the structured field <sup>[15][15]</sup>.

## Fun facts

- The Belastingdienst's spec admits that a growing number of assessment numbers are no longer converted by formula but receive a random betalingskenmerk looked up in tables — so the tax authority's website cannot convert those back and forth <sup>[3][3]</sup>.
- The acceptgiro started life in 1977 as a punch card <sup>[6][6]</sup>.

## Status

**Active as a reference; its original carrier is retired.** The acceptgiro ended on 1 June 2023 <sup>[6][6]</sup><sup>[8][8]</sup>, and Betaalvereniging's glossary now describes it as a former paper form replaced by mobile requests-to-pay, QR codes and pre-filled one-time direct-debit authorisations <sup>[12][12]</sup>. The betalingskenmerk itself remains documented in Betaalvereniging's current knowledge base <sup>[1][1]</sup>, in the NL SEPA Credit Transfer implementation guideline (issuer `CUR`) <sup>[4][4]</sup> and in the Belastingdienst's 2023 specification (v1.5, republished 2025) <sup>[3][3]</sup>. Betaalvereniging also warns that anyone, including fraudsters, can generate a valid EPC QR code, so QR-borne payment data on invoices should be checked before approval <sup>[17][17]</sup>.

## Sources

[1] [Payment reference](https://www.betaalvereniging.nl/en/knowledge-base/special-accounts-and-services/payment-reference/) — Betaalvereniging Nederland, accessed 2026.
[2] [Elfproef](https://nl.wikipedia.org/wiki/Elfproef) — Wikipedia (nl), accessed 2026.
[3] [Betalingskenmerk bepaling, versie 1.5](https://odb.belastingdienst.nl/wp-content/uploads/2025/07/Specificatie-Betalingskenmerk_bepaling_1.5.pdf) — Belastingdienst, 2023 (accessed 2026).
[4] [NL IG SEPA Credit Transfer Customer-to-Bank, 2023 v1.0](https://www.betaalvereniging.nl/en/wp-content/uploads/sites/4/2025/11/Betaalvereniging-NL_IG-C2B-SEPA-Credit-Transfer_2023_v1.0.pdf) — Betaalvereniging Nederland, November 2022 (accessed 2026).
[5] [EPC069-12 v3.0 Quick Response Code — Guidelines to Enable the Data Capture for the Initiation of an SCT](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] [Acceptgiro](https://nl.wikipedia.org/wiki/Acceptgiro) — Wikipedia (nl), accessed 2026.
[7] [Einddatum gebruik Acceptgiro voor onbepaalde tijd uitgesteld](https://www.banken.nl/nieuws/20218/einddatum-gebruik-acceptgiro-voor-onbepaalde-tijd-uitgesteld) — Banken.nl, May 2017 (accessed 2026).
[8] [Einde aan een tijdperk: de acceptgiro verdwijnt voorgoed](https://www.banken.nl/nieuws/23390/einde-aan-een-tijdperk-de-acceptgiro-verdwijnt-voorgoed) — Banken.nl, November 2021 (accessed 2026).
[9] [Acceptgiro bijna afgeschaft: is er een papieren alternatief?](https://radar.avrotros.nl/artikel/acceptgiro-bijna-afgeschaft-is-er-een-papieren-alternatief-en-nog-meer-vragen-54541) — Radar (AVROTROS), accessed 2026.
[10] [Betaalvereniging Nederland en leden introduceren standaard Betaalinstructie](https://www.banken.nl/nieuws/20950/betaalvereniging-nederland-en-leden-introduceren-standaard-betaalinstructie) — Banken.nl, June 2018 (accessed 2026).
[11] [Acceptgiro](https://www.banken.nl/bibliotheek/acceptgiro) — Banken.nl library, accessed 2026.
[12] [Acceptgiro (glossary)](https://www.betaalvereniging.nl/en/wp-json/wp/v2/btv_glossary/232) — Betaalvereniging Nederland, 2025 (accessed 2026).
[13] [sebastienrousseau/pain001 — `scenarios/overlays/nl.betalingskenmerk.yaml`](https://github.com/sebastienrousseau/pain001) — GitHub, accessed 2026.
[14] [EmileBons/PaymentReferenceValidator](https://github.com/EmileBons/PaymentReferenceValidator) — GitHub, accessed 2026.
[15] [shipdocs/boekhoudenvoorniks — `src/documents/epc-qr.ts`](https://github.com/shipdocs/boekhoudenvoorniks) — GitHub, accessed 2026.
[16] [KingOfTheAce2/belastingkenmerk-hulp — `src/lib/tax-logic.ts`](https://github.com/KingOfTheAce2/belastingkenmerk-hulp) — GitHub, accessed 2026.
[17] [QR codes (knowledge base)](https://www.betaalvereniging.nl/en/wp-json/wp/v2/btv_wiki/3052) — Betaalvereniging Nederland, 2025 (accessed 2026).

[1]: https://www.betaalvereniging.nl/en/knowledge-base/special-accounts-and-services/payment-reference/
[2]: https://nl.wikipedia.org/wiki/Elfproef
[3]: https://odb.belastingdienst.nl/wp-content/uploads/2025/07/Specificatie-Betalingskenmerk_bepaling_1.5.pdf
[4]: https://www.betaalvereniging.nl/en/wp-content/uploads/sites/4/2025/11/Betaalvereniging-NL_IG-C2B-SEPA-Credit-Transfer_2023_v1.0.pdf
[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://nl.wikipedia.org/wiki/Acceptgiro
[7]: https://www.banken.nl/nieuws/20218/einddatum-gebruik-acceptgiro-voor-onbepaalde-tijd-uitgesteld
[8]: https://www.banken.nl/nieuws/23390/einde-aan-een-tijdperk-de-acceptgiro-verdwijnt-voorgoed
[9]: https://radar.avrotros.nl/artikel/acceptgiro-bijna-afgeschaft-is-er-een-papieren-alternatief-en-nog-meer-vragen-54541
[10]: https://www.banken.nl/nieuws/20950/betaalvereniging-nederland-en-leden-introduceren-standaard-betaalinstructie
[11]: https://www.banken.nl/bibliotheek/acceptgiro
[12]: https://www.betaalvereniging.nl/en/wp-json/wp/v2/btv_glossary/232
[13]: https://github.com/sebastienrousseau/pain001
[14]: https://github.com/EmileBons/PaymentReferenceValidator
[15]: https://github.com/shipdocs/boekhoudenvoorniks
[16]: https://github.com/KingOfTheAce2/belastingkenmerk-hulp
[17]: https://www.betaalvereniging.nl/en/wp-json/wp/v2/btv_wiki/3052

## Deployments

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

- **NL** — [NL-netherlands.md](https://docs.barcoder.ai/docs/payments/NL)
