Direct naar de inhoud
test-nummers.nl

Betalingskenmerk Generator

Fictieve betalingskenmerken met een kloppend controlecijfer, zoals op facturen en aanslagen van de Belastingdienst: 16 cijfers, of 9 tot 14 cijfers met lengtecode. Inclusief validator en export.

FictiefAlle gegenereerde gegevens zijn fictief en alleen bedoeld voor test- en ontwikkelomgevingen. Een willekeurig geldig nummer kan toevallig bestaan: gebruik het nooit als echt gegeven.

Formaat

Controlecijfer + 15 cijfers. Het formaat van onder meer de Belastingdienst.

Weergave

Groepen van 4, van rechts naar links geteld, zoals de norm voorschrijft voor print.

Aantal

Betalingskenmerk controleren

Controleert lengte, lengtecode en controlecijfer. Spaties en punten mogen.

Wat is een betalingskenmerk?

Het betalingskenmerk is een getal van 7 tot 16 cijfers dat je bij een overboeking meegeeft, zodat de ontvanger de betaling automatisch aan een factuur of aanslag kan koppelen. Het komt van de acceptgiro en is vastgelegd in de acceptgironorm van Currence. De Belastingdienst gebruikt kenmerken van 16 cijfers, inclusief controlecijfer.

Currence stopte op 1 juni 2023 met de acceptgiro, maar het betalingskenmerk bleef. Volgens de Betaalvereniging kan een kenmerk van minimaal 9 cijfers gecontroleerd worden; een correct kenmerk gaat als gestructureerde informatie ("structured remittance information") mee met de betaling, een incorrect kenmerk als vrije tekst. In SEPA-berichten herken je het aan de uitgever CUR.

Lengtes, lengtecode en controlecijfer

De acceptgironorm kent drie vormen:

LengteOpbouwControlecijfer
16Controlecijfer + 15 cijfersJa
9–14Controlecijfer + lengtecode + kenmerk van 7 tot 12 cijfers. De lengtecode is het aantal cijfers van het kenmerk, modulo 10 (7→7 … 10→0, 11→1, 12→2).Ja, inclusief lengtecode
7Vast volgnummerNee

Lengtes van 8 en 15 cijfers bestaan niet. Een kenmerk wordt geprint in groepen van vier cijfers, van rechts naar links geteld, bijvoorbeeld 0 7901 2345 voor een kenmerk van 9 cijfers.

Zo bereken je het controlecijfer

Het controlecijfer volgt uit een gewogen modulus 11. Geef elk cijfer na het controlecijfer een gewicht, vanaf het meest rechtse cijfer naar links: 2, 4, 8, 5, 10, 9, 7, 3, 6, 1, en daarna opnieuw. Tel de producten op, neem de rest na deling door 11 en trek die af van 11. Komt daar 10 uit, dan wordt het controlecijfer 1; komt er 11 uit, dan wordt het 0.

Uitgewerkt voor het voorbeeld uit de norm, 5000 0567 8901 2345:

Cijfer000056789012345
Gewicht10584216379105842
Product000010642246301010241610

Som = 215. 215 gedeeld door 11 geeft rest 6. 11 − 6 = 5, dus het controlecijfer is 5 en het volledige kenmerk 5000 0567 8901 2345.

Omdat rest 1 en rest 10 allebei controlecijfer 1 opleveren, vangt de controle niet elke tikfout af: een fout die de rest van 1 naar 10 verschuift (of andersom) valt niet op. Alle andere fouten in één cijfer worden wel gevonden.

Wanneer heb je fictieve betalingskenmerken nodig?

  • Facturatiesoftware — test of je systeem kenmerken met een kloppend controlecijfer aanmaakt en ze correct op de factuur en in de betaalinstructie zet.
  • Afletteren en reconciliatie — simuleer inkomende betalingen met een kenmerk en controleer dat je boekhouding ze aan de juiste factuur koppelt.
  • Betaalbestanden — vul testbestanden voor overboekingen met kenmerken van de uitgever CUR, samen met fictieve IBAN's.
  • Invoervalidatie — een betaalformulier moet een fout controlecijfer, een verkeerde lengtecode en lengtes van 8 of 15 cijfers afkeuren, en spaties en een voorloopnul accepteren.

Betalingskenmerk valideren in TypeScript

const WEIGHTS = [2, 4, 8, 5, 10, 9, 7, 3, 6, 1]; // van rechts naar links, herhalend

export function kenmerkCheckDigit(body: string): number {
  let sum = 0;
  for (let i = 0; i < body.length; i++) {
    sum += Number(body[body.length - 1 - i]) * WEIGHTS[i % 10];
  }
  const c = 11 - (sum % 11);
  return c === 10 ? 1 : c === 11 ? 0 : c;
}

export function isValidBetalingskenmerk(input: string): boolean {
  const k = input.replace(/\s/g, '');
  if (/^\d{7}$/.test(k)) return true; // volgnummer zonder controlecijfer
  if (/^\d{16}$/.test(k)) return kenmerkCheckDigit(k.slice(1)) === Number(k[0]);
  if (!/^\d{9,14}$/.test(k)) return false;
  const lengthCode = (k.length - 2) % 10;
  return Number(k[1]) === lengthCode && kenmerkCheckDigit(k.slice(1)) === Number(k[0]);
}

Veelgestelde vragen

Wat is een betalingskenmerk?

Een getal van 7 tot 16 cijfers waarmee de ontvanger een betaling automatisch aan een factuur of aanslag koppelt. Het werd bekend van de acceptgiro en wordt nog steeds gebruikt bij gewone overboekingen, onder meer door de Belastingdienst.

Bestaat het betalingskenmerk nog nu de acceptgiro weg is?

Ja. Currence stopte op 1 juni 2023 met de acceptgiro, maar het betalingskenmerk kun je nog steeds meegeven bij een SEPA-overboeking. Volgens de Betaalvereniging controleren banken kenmerken van 9 cijfers of meer, en komt een geldig kenmerk als gestructureerde informatie bij de ontvanger aan.

Kan een betalingskenmerk met een 0 beginnen?

Ja. Het eerste cijfer is het controlecijfer, en dat wordt 0 als de rest na deling door 11 nul is. Sla een betalingskenmerk daarom altijd op als tekst: als getal verdwijnt de voorloopnul en daarmee het controlecijfer. Het controlecijfer 1 komt twee keer zo vaak voor als de andere, omdat zowel rest 1 als rest 10 een 1 oplevert.

Zijn de gegenereerde betalingskenmerken echt?

Nee. Ze zijn willekeurig gegenereerd en hebben alleen een kloppend controlecijfer. Gebruik ze in testomgevingen, nooit voor een echte betaling: het kenmerk hoort dan niet bij een openstaande factuur of aanslag.

Wat is de lengtecode?

Bij een betalingskenmerk van 9 tot en met 14 cijfers is het tweede cijfer de lengtecode: het aantal cijfers van het eigenlijke kenmerk, modulo 10. Een kenmerk van 7 cijfers krijgt lengtecode 7, een kenmerk van 10 cijfers lengtecode 0. De lengtecode telt mee in het controlecijfer.

Gerelateerde tools