Standards/betalingskenmerk
Betalingskenmerk
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 1. It originated as the reference printed on the paper acceptgiro form, whose 16-digit kenmerk typically encoded customer and invoice numbers for automated processing 6. Although the acceptgiro itself was abolished on 1 June 2023 68, 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 134.
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 6. Issuance was regulated by Acceptgiro B.V., a subsidiary of Currence, the acceptgiro's product owner 68. The pre-printed form carried the debtor name, account number, amount and the betalingskenmerk 6.
- Peak. Over 171 million paper acceptgiros were sent in 2008 6; a consumer-programme account puts the historical peak at about 300 million transactions a year 9.
- The 2019 deadline that slipped. The paper acceptgiro was originally to exist "until at most 1 January 2019" 11. 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 7.
- 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 10.
- 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 89. By then use was falling about 30% a year and over 90% of recipients paid via internet or mobile banking instead 8.
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 1. 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 1.
Structure by length (per the acceptgiro rules as summarised on Wikipedia) 2:
| 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) 2.
Check digit — the "acceptgiro-elfproef" (weighted modulus 11) 2:
- 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.
- Sum the products to S; take R = S mod 11.
- 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 2. (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 14. 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 3.
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) 3:
- 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) 3. - 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 =03. - Example codes for pos 10–11 include
70income tax,71protective assessments,24rent benefit,25healthcare benefit,78/87motor-vehicle holder taxes and85/86Eurovignette 3. - Some assessments (e.g. certain environmental levies) are not converted by formula but receive a random betalingskenmerk whose mapping is held in internal tables 3.
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 4. On the receiving side, a correct reference is reported as structured remittance information and an incorrect one as unstructured remittance information 1.
Carriage in the EPC QR code. The EPC QR / Stuzza 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 5. 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 15.
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 3.
- Invoices from companies and charities. The kenmerk was the reconciliation key on acceptgiros, used notably by charities 7, and continues on invoices laid out per the Betaalinstructie standard 10.
- Bulk corporate payments. Payment files sent to Dutch banks carry it as a structured creditor reference with issuer
CUR4; an open-source ISO 20022 toolkit ships a validation overlay enforcing exactly this (Issr=CUR,Refmatches 16 digits) 13. - Reconciliation / reporting. Correct references flow through to the payee's statement as structured remittance data, enabling automatic matching of payments to invoices and assessments 1.
Implementations
No widely adopted, dedicated betalingskenmerk library was found on GitHub; support appears inside larger payment or bookkeeping projects:
- sebastienrousseau/pain001 — Python, 49 stars, active October 2026. ISO 20022
pain.001/pain.008generator and validator with annl.betalingskenmerkoverlay enforcing issuerCURand a 16-digit[0-9]{16}reference (format only; no check-digit rule) 13. - 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) 14.
- 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 15.
- Caution: at least one small tax-kenmerk helper (KingOfTheAce2/belastingkenmerk-hulp, TypeScript, 0 stars) computes the check digit with linear weights 2…16 16; 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) 3, whereas the acceptgiro weight cycle does 2.
Comparison
Betalingskenmerk vs. ISO 11649 RF creditor reference (RF Creditor Reference (ISO 11649)). Betaalvereniging documents both side by side 1:
| 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 2 | Two check digits per ISO 11649 |
| Scope | Dutch domestic | International / European transfers |
| ISO 20022 issuer | CUR (NL usage rule) 4 |
Standard SCOR creditor reference |
The Betaalinstructie lets invoice senders choose the familiar 16-digit Dutch reference or the ISO reference for European transfers 10. Choose the betalingskenmerk where payers are Dutch and existing back-office matching depends on it (e.g. tax assessments 3); choose RF where payers are cross-border or where tools such as EPC QR generators only accept RF in the structured field 15.
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 3.
- The acceptgiro started life in 1977 as a punch card 6.
Status
Active as a reference; its original carrier is retired. The acceptgiro ended on 1 June 2023 68, 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 12. The betalingskenmerk itself remains documented in Betaalvereniging's current knowledge base 1, in the NL SEPA Credit Transfer implementation guideline (issuer CUR) 4 and in the Belastingdienst's 2023 specification (v1.5, republished 2025) 3. 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 17.
Sources
1 Payment reference — Betaalvereniging Nederland, accessed 2026.
2 Elfproef — Wikipedia (nl), accessed 2026.
3 Betalingskenmerk bepaling, versie 1.5 — Belastingdienst, 2023 (accessed 2026).
4 NL IG SEPA Credit Transfer Customer-to-Bank, 2023 v1.0 — 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 — European Payments Council, 2022 (accessed 2026).
6 Acceptgiro — Wikipedia (nl), accessed 2026.
7 Einddatum gebruik Acceptgiro voor onbepaalde tijd uitgesteld — Banken.nl, May 2017 (accessed 2026).
8 Einde aan een tijdperk: de acceptgiro verdwijnt voorgoed — Banken.nl, November 2021 (accessed 2026).
9 Acceptgiro bijna afgeschaft: is er een papieren alternatief? — Radar (AVROTROS), accessed 2026.
10 Betaalvereniging Nederland en leden introduceren standaard Betaalinstructie — Banken.nl, June 2018 (accessed 2026).
11 Acceptgiro — Banken.nl library, accessed 2026.
12 Acceptgiro (glossary) — Betaalvereniging Nederland, 2025 (accessed 2026).
13 sebastienrousseau/pain001 — scenarios/overlays/nl.betalingskenmerk.yaml — GitHub, accessed 2026.
14 EmileBons/PaymentReferenceValidator — GitHub, accessed 2026.
15 shipdocs/boekhoudenvoorniks — src/documents/epc-qr.ts — GitHub, accessed 2026.
16 KingOfTheAce2/belastingkenmerk-hulp — src/lib/tax-logic.ts — GitHub, accessed 2026.
17 QR codes (knowledge base) — Betaalvereniging Nederland, 2025 (accessed 2026).
Deployments
Found in the following country reports (grep across reports/countries/):
- NL — NL-netherlands.md