Kaartnummers lijken op het eerste gezicht inwisselbaar, maar hun creditcardnummerformaat is niet één vorm die zich herhaalt — de lengte verandert per netwerk, de eerste cijfers dragen betekenis, en het laatste cijfer is rekenkunde in plaats van toewijzing. Weten hoe de stukken in elkaar passen, is wat je in staat stelt een goed gevormd nummer te onderscheiden van een geloofwaardig uitziend nummer, en het verklaart het meeste vreemde validatiegedrag dat je in afrekenformulieren tegenkomt.
De onderstaande secties splitsen het nummer in zijn delen, beschrijven hoe je een gegroepeerd nummer leest zoals het gedrukt staat, en eindigen met de praktische details die bepalen of je invoerafhandeling bestand is tegen echte gebruikers.
De drie delen van een kaartnummer
Elk kaartnummer is een aaneenschakeling van drie velden, zonder scheidingstekens geschreven wanneer het wordt opgeslagen:
- De uitgeversprefix. Historisch het bankidentificatienummer genoemd en nu aangeduid als het uitgever-identificatienummer; dit leidende blok vertelt het routersysteem tot welk netwerk de kaart behoort en, in de meeste gevallen, welke instelling haar heeft uitgegeven. Het is geen vaste breedte; zowel kortere als langere vormen zijn in gebruik, en de lengte is geregistreerd in plaats van geraden.
- De accountcijfers. Dit is het deel dat de uitgever toekent. De enige eis is dat het uniek is binnen het bereik van de uitgever. Het is geen klantnummer dat je kunt decoderen, en twee opeenvolgende accountcijfers hebben geen enkele relatie met elkaar.
- Het controlecijfer. Eén cijfer, berekend uit alle andere met het Luhn-algoritme. Het bestaat om typefouten op te vangen en niets anders.
Samen gelezen is het beeld eenvoudig: de voorkant van het nummer zegt waar de kaart vandaan komt, het midden is willekeurige toewijzing, en het einde is een typefoutbeveiliging.
Waarom hebben kaartnummers verschillende lengtes?
De lengte is nooit gestandaardiseerd naar één waarde, omdat de nummering van kaarten is voortgekomen uit meerdere nationale en branchespecifieke schema’s die later zijn geharmoniseerd in plaats van herschreven. De internationale standaard die het formaat regelt, stelt een bovengrens van negentien cijfers en laat de exacte lengte aan elk netwerk en product over.
In de praktijk kom je een kleine verzameling lengtes tegen. Zestien cijfers is het meest voorkomend en degene die mensen voor zich zien bij het woord kaart. Vijftien cijfers is standaard voor American Express. Vormen met dertien en veertien cijfers bestaan ook, grotendeels in oudere of regionale producten, en sommige netwerken gebruiken een langere indeling voor bepaalde kaarttypen.
De belangrijke consequentie voor validatie is dat een regel die is geschreven als precies zestien cijfers onjuist is. Ze wijst echte kaarten af, en weigert ook volkomen goede testdata. Een correcte regel accepteert een bereik, controleert de prefix tegen de verwachtingen van dat netwerk, en draait pas daarna de controlesom.
Wat vertelt het eerste cijfer je?
Het leidende cijfer is een branchemarkering in plaats van een netwerknaam, en de koppeling is openbaar. Het beperkt welke soort uitgever je tegenover je hebt voordat de rest van de prefix het specifieke programma identificeert.
| Leidend cijfer | Branchesector |
|---|---|
| 1 en 2 | Luchtvaartmaatschappijen |
| 3 | Reizen en entertainment |
| 4 en 5 | Bankieren en financieel |
| 6 | Handel en bankieren |
| 7 | Aardolie |
| 8 | Telecommunicatie |
| 9 | Nationale toewijzing |
Het eerste cijfer alleen identificeert nooit een netwerk. Kaartbereiken leven binnen die sectoren: het cijfer vier behoort tot de banksector, en een bereik daarbinnen hoort bij één netwerk, terwijl een ander bereik in dezelfde sector bij een ander hoort. Daarom heeft merkdetectie meer dan één cijfer nodig, en daarom zal een detector die alleen op het eerste teken is gebouwd een verrassend deel van de invoer verkeerd labelen.
Hoe lees je een gegroepeerd kaartnummer?
Op een kaart en in de meeste interfaces verschijnen de cijfers in groepen, en de groepering volgt het netwerk in plaats van een universele regel. Vier groepen van vier is de bekende indeling voor een kaart met zestien cijfers; American Express wordt conventioneel weergegeven als vier, zes en vijf, passend bij de vijftien cijfers. Sommige interfaces splitsen de eerste groep van zes af om de uitgeversprefix zichtbaar te maken, en andere laten het nummer ononderbroken.
Voor een lezer is de groepering een geheugensteuntje. Voor een ontwikkelaar is het alleen presentatie, en dat onderscheid veroorzaakt echte bugs: een invoerveld dat een geplakt nummer weigert omdat de plakactie spaties bevatte, wijst het formaat af waarin de kaart zelf is gedrukt. Sla cijfers op, toon groepen, en converteer tussen de twee aan de randen.
Opmaak is geen validatie
Het is verleidelijk een bekende vorm als bewijs van echtheid te behandelen. Dat is het niet. Elke prefix kan met willekeurige middelste cijfers worden gecombineerd, en er kan een passend afsluitend cijfer worden berekend, dus een reeks die er precies als een bekende kaart uitziet, kan volledig synthetisch zijn.
Alles in dit artikel beschrijft structuur. Het zegt niets over of een account bestaat, of een kaart actief is of een betaling wordt goedgekeurd, omdat geen van die vragen kan worden beantwoord door de cijfers te onderzoeken. Alle nummers die de generator op deze site produceert, vallen precies in die categorie: correct gevormd, nooit uitgegeven.
Voor ontwikkelaars: invoer opschonen zonder informatie te verliezen
De ongemakkelijke waarheid over kaartnummervelden is dat gebruikers ze op onvoorspelbare manieren typen. Ze plakken uit een e-mail met spaties, ze nemen een volgend teken uit een vorig veld mee, ze typen een koppelteken waar een spatie hoort. Dat opschonen is noodzakelijk; het slordig doen is hoe geldige invoer wordt vernietigd.
Een werkbare volgorde ziet er zo uit. Trim de uiteinden. Verwijder de scheidingstekens die je wilt tolereren in plaats van elk niet-cijfer, zodat een letter een duidelijke fout oplevert in plaats van stilletjes te worden verwijderd. Houd het resultaat zijn hele leven als string, want een numeriek type laat een voorloopnul vallen en verandert de betekenis van de waarde. Vergelijk de opgeschoonde lengte met het netwerkbereik voor de gedetecteerde prefix. Draai de controlesom als laatste.
Beslis daarna hoe je toont wat je hebt ontvangen. Een veld dat herformatteert terwijl de gebruiker typt, is prettig op een desktoptoetsenbord en kan ronduit vijandig zijn op een telefoon, waar de cursor springt en backspace zich onverwacht gedraagt. Als je cijfers groepeert tijdens het typen, test dan het geval waarin een fout midden in de reeks wordt gecorrigeerd, niet alleen aan het einde.
Houd ook de foutmeldingen gescheiden. Te kort, niet-ondersteunde tekens, onbekende prefix en mislukte controlesom zijn vier verschillende problemen, en een formulier dat ze allemaal als “ongeldig kaartnummer” rapporteert, maakt debuggen traag voor de gebruiker en voor jou.
Een nummer controleren in de kaarttool
Als je een nummer van een specifieke vorm nodig hebt — één netwerk, één lengte, één prefix — dan produceert de kaartnummersgenerator ze zonder account en kun je het netwerk expliciet kiezen of de keuze willekeurig laten. De aanvulmodus is nuttig wanneer je al een deel van een waarde hebt en de onbekende cijfers consistent met de rest wilt laten invullen.
Twee gerelateerde pagina’s gaan dieper. De netwerkvergelijking somt de gepubliceerde bereiken en de bijbehorende lengtes op, en de validatiewalkthrough zet het bovenstaande volgorde-advies om in een concrete reeks controles.
Volgende stappen
Controleer één bestaand formulier tegen de hier beschreven volgorde — lengte, dan tekens, dan prefix, dan controlesom — en bevestig dat elke fout zijn eigen melding oplevert. Genereer daarna een kleine set nummers die bewust meer dan één lengte bestrijkt, zodat de volgende persoon die de validatieregel bewerkt iets heeft om tegen te testen.