Hoe berekent de NS eigenlijk de prijs van je treinkaartje?

Een enkele reis van 100 tariefeenheden kost in 2026 € 22,70. Hoe NS op dat bedrag komt, staat nergens. De officiële prijslijst geeft op pagina 6 tot en met 10 alleen een lange tabel, met per tariefeenheid een prijs. Ik heb geprobeerd de formule erachter terug te rekenen.

De korte versie: een opstaptarief plus een prijs per eenheid die in stappen daalt, afgerond op dubbeltjes, verklaart 173 van de 193 prijzen precies. Exact krijg je het niet, en dat heeft een reden.

Tariefeenheden, niet kilometers

NS rekent niet in kilometers maar in tariefeenheden (TE). Voor elk traject ligt vast hoeveel eenheden het telt. Dat komt grofweg overeen met de afstand, maar niet altijd precies.

De tabel voor enkele reizen en dagretours 2e klas loopt van 0 tot 200 TE:

  • 0 t/m 8 TE kost altijd € 3,00. Dat is het minimumtarief.
  • Boven de 200 TE wordt het niet duurder. Een reis van Den Helder naar Maastricht is ongeveer 298 km, maar je betaalt hetzelfde als voor 200 TE: € 33,30.
  • Daartussen stijgt de prijs met 10 of 20 cent per eenheid, steeds minder snel naarmate de reis langer wordt.

De andere kolommen in de tabel zijn simpel. 20% korting is het volle tarief maal 0,8, 40% korting maal 0,6, en de prijs zonder btw is het volle tarief gedeeld door 1,09. Dat klopt voor alle regels tot op de cent. Met een eenmalige chipkaart betaal je per reis € 1,60 extra.

Een formule die NS niet deelt

Dat NS een rekenregel heeft, staat vast. Hij wordt alleen niet gepubliceerd. Treinreiziger.nl schreef in augustus 2014 al dat de treintarieven sinds de OV-chipkaart een black box waren geworden. Er werd een formule voor langeafstandskorting gebruikt, maar de vervoerders wilden die niet laten zien. Dat terwijl de Tweede Kamer unaniem een motie had aangenomen om hem openbaar te maken.

Twee ontwikkelaars gingen er zelf mee aan de slag: Thomas Koch van de app OVinfo en Geert Wirken van Rijdendetreinen.nl. Ze achterhaalden de formules achter de treintarieven en zetten hun werk als project Glassbox op GitHub, zodat andere ontwikkelaars het konden gebruiken. Koch noemde het een glazen doos tegenover de black box van NS.

Glassbox combineerde de afstand tussen stations met de kilometertarieven van de regionale concessies. Volgens Koch en Wirken zat de berekening bij slechts 0,005% van de reizen fout, en dan hooguit 7 cent. Die kleine afwijkingen kwamen volgens het artikel doordat alleen van NS en Arriva de precieze degressie bekend was, en van de andere vervoerders niet.

Mijn reconstructie: opstaptarief plus schijven

Ik heb alle 193 regels uit de prijslijst van 2026 gehaald en er een stuksgewijs lineaire functie door gefit. Die werkt als de inkomstenbelasting: je begint met een vast opstapbedrag, en per schijf betaal je een lager bedrag per tariefeenheid.

TariefeenhedenPrijs per TE
0 – 80€ 0,2228
80 – 100€ 0,1777
100 – 120€ 0,1552
120 – 150€ 0,1008
150 – 200€ 0,0896

Daar komt een opstaptarief van € 1,30 bij. In formulevorm, met TE het aantal tariefeenheden:

Hier is TEᵢ het aantal eenheden dat in schijf i valt en tᵢ de prijs per eenheid in die schijf. Het resultaat wordt afgerond op € 0,10, met een minimum van € 3,00.

Voorbeeld voor 100 TE: 1,30 + 80 × 0,2228 + 20 × 0,1777 = 22,68. Afgerond is dat € 22,70, precies wat in de tabel staat.

Deze formule klopt voor 173 van de 193 regels tot op de cent. Bij 18 regels zit hij er € 0,10 naast, bij twee (66 en 67 TE) € 0,20. De schijfgrenzen 80, 100, 120 en 150 heb ik niet zelf gekozen. Een automatische zoektocht naar de beste breekpunten kwam uit op 80, 100, 120 en 148, vrijwel dezelfde ronde getallen.

De stippellijnen markeren de schijfgrenzen. Boven elke schijf staat wat een extra tariefeenheid daar kost.

Wat niet werkt

Iemand opperde a + b · ln(TE), afgerond op dubbeltjes. Het idee erachter klopt: hoe verder je reist, hoe goedkoper per eenheid. Maar de beste fit, ongeveer −30,19 + 11,61 · ln(TE), raakt maar 2 van de 193 prijzen. Bij 9 TE komt er zelfs een negatief bedrag uit, en bij 200 TE zit hij € 2 te laag.

Het probleem is de vorm. Tot ongeveer 80 TE loopt de prijs gewoon recht omhoog, met zo’n 22 cent per eenheid. Een logaritme stijgt juist op korte afstanden het hardst en vlakt daarna af. Hij zit er dus het verst naast waar de meeste mensen reizen. Een machtsfunctie a + b · TE^c doet het nauwelijks beter: 9 van de 193 goed, met afwijkingen tot € 1,20.

Rechte lijnen tussen een paar ijkpunten (0–8 TE op € 3,00, en 80, 120 en 200 TE) komen dichter in de buurt, maar ook dat raakt maar 66 van de 193 prijzen. De rest ligt € 0,10 tot € 0,20 te laag. Dat komt doordat de € 3,00 een minimum is en geen punt op de lijn, en doordat er tussen 80 en 120 nog een knik zit bij 100 TE.

Waarom het nooit precies klopt

De tabel heeft een paar eigenaardigheden die geen nette formule oplevert:

  • Tussen 64 en 69 TE ligt de prijs € 0,10 tot € 0,20 hoger dan de lijn. Van 63 naar 64 TE springt hij met 40 cent, terwijl een stap normaal 20 cent is.
  • Op een paar plekken kosten twee opeenvolgende eenheden precies hetzelfde, zoals 155 en 156 TE (allebei € 29,30) en 165 en 166 TE (allebei € 30,20).

Mijn verklaring, die ik niet heb kunnen bevestigen: NS berekent de tabel niet elk jaar opnieuw uit een formule. NS mag de tarieven jaarlijks met de inflatie verhogen, plus een stijging van de gebruiksvergoeding die ProRail rekent (Treinreiziger.nl). Als de tabel van vorig jaar elke keer met dat percentage wordt verhoogd en opnieuw op dubbeltjes afgerond, stapelen kleine afrondingen zich jaar na jaar op. Dan krijg je precies dit soort bultjes en dubbele prijzen.

Daar komt bij dat NS ook ingrijpt op de korte afstanden. Volgens Treinreiziger.nl lag het starttarief voor 1 t/m 8 TE eerder op € 2,60, tegen € 2,10 in 2014. Nu is het € 3,00. Korte ritten werden dus sneller duurder dan lange.

Conclusie

Wil je de prijs van een treinreis schatten, gebruik dan het opstaptarief van € 1,30 met de vijf schijven. Daarmee zit je in negen van de tien gevallen precies goed, en anders hooguit 20 cent ernaast. Wil je de echte prijs, zoek hem dan op in de tabel. De formule die NS zelf gebruikt, als die nog bestaat, is na twaalf jaar nog steeds niet openbaar.

Bronnen

Similar Posts