Een nationale-ID-nummergenerator produceert identificaties die overeenkomen met het formaat dat elk land werkelijk uitgeeft, inclusief de lengte, de tekenset, de plaatsing van het controlecijfer en de interne regels die het ene nummer geldig maken en het andere ongeldig. Het verschil tussen een nuttig hulpmiddel en een willekeurige cijferreeks komt neer op die regels, want elk serieus validatiepad controleert ze.
Deze gids bekijkt hoe identificatienummers tussen landen verschillen, waarom een tijdelijke waarde zoals 123456789 elke controle niet doorstaat en dus niets test, waarom de lengte per land moet worden geconfigureerd in plaats van aangenomen, en wat de eerlijke grens van een synthetisch record in een KYC-stroom is. Aan het einde zou je moeten weten welke eigenschappen een testidentiteit nodig heeft om een echte onboardingpijplijn te beoefenen.
Waarom zijn identificatienummers niet één formaat met verschillende lengtes?
De wijdverbreide aanname dat elk land een identificatie uitgeeft die in wezen een lang nummer met een checksum is, is onjuist op manieren die echte systemen breken. Landen verschillen erin of de identificatie überhaupt numeriek is, of ze bij de geboorte of bij registratie wordt uitgegeven, of ze een datum codeert, en of ze op een kaart verschijnt of alleen in een register.
Het Amerikaanse Social Security-nummer bestaat uit negen cijfers in drie groepen, en het formaat is het enige wat het zichtbare nummer draagt. Het artikel over het formaat van het Social Security-nummer legt uit welke reeksen nooit worden uitgegeven en waarom een validator die elke negencijferige reeks accepteert, nummers accepteert die niet kunnen bestaan.
China geeft een residentieel identiteitsnummer van achttien tekens uit dat begint met een adrescode, doorgaat met een geboortedatum en eindigt met een controlekarakter dat de letter X kan zijn. Brazilië geeft de CPF uit als elf cijfers waarvan de laatste twee controlecijfers zijn die uit de voorafgaande negen worden berekend, en vaak geschreven met leestekens die een parser moet aankunnen. Turkije geeft het T.C. Kimlik No uit als elf cijfers waarvan het eerste cijfer nooit nul is en waarvan de laatste twee cijfers van de andere zijn afgeleid.
Spanje geeft de DNI uit als acht cijfers plus een controleletter die uit een modulus wordt berekend, en de NIE voor buitenlandse inwoners volgt hetzelfde schema met een andere voorloopletter. Indonesië geeft een NIK van zestien cijfers uit die een districtcode en een datum bevat. Vietnam geeft een burgeridentiteitsnummer van twaalf cijfers uit. Rusland geeft de INN uit als tien of twaalf cijfers afhankelijk van de entiteit, en de SNILS als elf cijfers in een genummerd formaat. Het artikel over de lengte van nationale ID’s per land verzamelt de lengtes op één plek.
Waarom is het controlecijfer het hele punt?
Een controlecijfer verandert een reeks cijfers in een waarde die op interne consistentie kan worden getest. Zonder dat is elk nummer van de juiste lengte even geldig, en een veld dat simpelweg tekens telt, accepteert een typefout, een afgekapte plakactie en een verzonnen nummer met evenveel enthousiasme.
Met dat cijfer kan een validator de overgrote meerderheid van verkeerd getypte waarden afwijzen voordat iets stroomafwaarts ze ziet. Dat is het hele voordeel, en het is waarom een generator die geen controlecijfers berekent, data produceert die het validatiepad dat hij zou moeten testen niet kan beoefenen.
De consequenties van het overslaan ervan zijn makkelijk te zien. Een fixture die met tijdelijke waarden is gevuld, zal een lengtecontrole doorstaan en elke checksum niet doorstaan, dus de test beoefent alleen de afwijzingstak. Fouten in de acceptatietak — de tak die in productie draait — blijven onbezocht, en de suite meldt succes terwijl hij niets dekt.
Daarom doet de rekenkunde er meer toe dan de verschijning. De gids over controlecijfers van nationale ID’s loopt de modulusmethoden door die in verscheidene landen worden gebruikt, en het overzicht van controlecijferalgoritmen plaatst ze in de bredere familie van controles waartoe ook bankrekeningnummers en barcodes behoren. Wanneer je een generator kiest, is de vraag welke landalgoritmen hij implementeert en of de uitvoer een onafhankelijke validator doorstaat.
Waarom moet de lengte per land worden geconfigureerd?
Niets aan een identificatieveld mag hardgecodeerd zijn. Een schema dat elke identificatie in één kolom met vaste breedte opslaat, zal de langere afkappen en lege ruimte laten voor de kortere, en een validator die één lengte aanneemt, zal elk land afwijzen waarvoor hij niet is geschreven.
Het praktische ontwerp is een landveld dat een regelset selecteert, en een regelset die de lengte, de toegestane tekens, het controlealgoritme en de manier waarop de waarde voor weergave wordt gepresenteerd, draagt. De opgeslagen waarde en de weergegeven waarde zijn meestal verschillend, omdat veel landen leestekens afdrukken die geen deel uitmaken van de identificatie zelf.
Configuratie moet ook omgaan met de landen die helemaal geen dergelijke identificatie uitgeven. In die gevallen hoort het veld terecht afwezig te zijn in plaats van gevuld met een plausibel uitziende reeks. Een afwezige waarde en een verkeerde waarde falen stroomafwaarts anders, en een schema dat afwezigheid niet kan uitdrukken, zal uiteindelijk een verzonnen identificatie opslaan in een record die er nooit een had.
Waar meerdere identificaties in één land bestaan, moet het model ze onderscheiden. Een belastingnummer, een sociaalverzekeringsnummer en een nationale identiteitsnummer kunnen in dezelfde jurisdictie allemaal elf cijfers zijn, en ze als één veld behandelen garandeert dat een test uiteindelijk op de verkeerde toetst. Elke identificatie benoemen naar wat ze is in plaats van naar haar positie in het formulier is de goedkoopste manier om ze uit elkaar te houden, en het maakt een export uit het ene land leesbaar in het andere.
Hoe gedraagt een synthetische identificatie zich in een KYC-stroom?
Een KYC-stroom doet doorgaans verscheidene dingen met een identificatie. Hij controleert het formaat, berekent het controlecijfer, dient de waarde in bij een externe verificatiedienst, slaat het resultaat op, en bewaart soms een afbeelding van een document. Een gegenereerd nummer zal aan de eerste twee voldoen en de derde niet doorstaan, en dat is het juiste gedrag voor synthetische data.
De mislukking bij de derde stap is wat het record veilig maakt. Omdat geen enkele uitgevende autoriteit het bestaan van het nummer kent, kan geen enkele verificatiedienst het bevestigen, en kan er geen account op worden geopend. Als een gegenereerd nummer ooit een externe verificatie zou doorstaan, zou dat betekenen dat het nummer aan iemand toebehoorde, wat een ernstige fout in de generator zou zijn in plaats van een functie.
Dit betekent dat KYC-testen met synthetische identificaties op twee niveaus gebeurt. Het lokale niveau test je eigen validatie, opmaak, foutafhandeling en opslag, en synthetische waarden zijn daarvoor ideaal. Het integratieniveau vereist een sandbox die door de verificatieleverancier wordt geleverd, en die sandboxen worden meestal geleverd met hun eigen vaste testidentiteiten. De twee door elkaar halen — een synthetisch nummer door een live verificatie-eindpunt jagen — levert niets dan ruis op.
Teams moeten ook oppassen waarop ze bij de externe stap toetsen. Een test die een specifieke afwijzingscode van een echte leverancier verwacht, test het huidige gedrag van de leverancier, dat zonder aankondiging verandert. Een test die verwacht dat je applicatie een afwijzing netjes afhandelt, test je eigen software, en dat is wat je bezit. Dezelfde redenering geldt voor de timing van de controle: als je stroom asynchroon verifieert, zijn de interessante gevallen een traag antwoord, een time-out en een antwoord dat twee keer aankomt, en die zijn goedkoper te produceren met een stub die je beheert dan met een sandbox van een leverancier die op een vaste manier antwoordt.
Wat zijn de nalevingsgrenzen voor identiteitstests?
De eerste grens is dat een synthetisch record geen persoon is. Het kan een naam, een geboortedatum, een adres en een identificatie hebben, en geen daarvan behoort iemand toe. Het presenteren als iemands identiteit, of het gebruiken om een echt individu na te doen, is misbruik ongeacht hoe het record is geproduceerd.
De tweede grens betreft echte data. Een record dat een echte naam met een echte identificatie combineert, is naar elke praktische definitie een echte identiteit, en zulke records naar een testomgeving kopiëren is een openbaarmaking. Het artikel over testidentiteitsdata legt uit waarom het kopiëren van productierijen naar een lagere omgeving zowel een regelgevend als een operationeel probleem is, en het artikel over GDPR en testidentiteitsdata behandelt het juridische kader.
De derde grens is doel. Een gegenereerde identificatie bestaat om een stroom te beoefenen die jij beheert, en mag niet worden gebruikt om een echt account te openen, een verificatiestap te doorstaan, een uitkering te claimen, een document te verkrijgen, of een controle te omzeilen die bestaat om iemand te beschermen. Dat geldt of de stroom nu van jou is of van een derde.
De vierde grens is bewaring. Zelfs synthetische records stapelen zich op, en een database met een miljoen gegenereerde identiteiten is op zichzelf niet gevaarlijk, maar is in één oogopslag niet te onderscheiden van een die dat wel is. Gegenereerde rijen markeren, generatieparameters bewaren en fixtures verwijderen die niet meer worden gebruikt, houdt het onderscheid zichtbaar.
Een vijfde grens is eerlijke presentatie. Als een synthetisch record ooit de testomgeving moet verlaten — in een demo, een screenshot of een trainingscursus — hoort het gelabeld te zijn als gegenereerd, overal waar een lezer het voor de data van een echt persoon zou kunnen aanzien. Het label kost niets en neemt een dubbelzinnigheid weg die een lezer niet zelf kan oplossen.
Wat moet een testidentiteitsrecord bevatten?
Een bruikbaar record draagt een samenhangende set velden in plaats van alleen een identificatie. Voornamen en een achternaam die bij het land passen, een geboortedatum die consistent is met een geldige leeftijdsrange, een adres binnen dezelfde jurisdictie, een telefoonnummer met het belvoorvoegsel van het land, en de identificaties die dat land werkelijk uitgeeft. Elk paar in die set beperkt het andere lid, en dat is de eigenschap die het record bruikbaar maakt.
Lever zowel een vast record voor beweringen als een gegenereerd record voor verkenning. Het vaste record maakt een regressietest zinvol, en het gegenereerde record vindt gevallen die niemand heeft opgeschreven. De identiteitsgenerator op deze site is zo gebouwd dat dezelfde sleutel met hetzelfde land hetzelfde record teruggeeft, wat een fixture stabiel over runs heen laat blijven terwijl andere records de ruimte verkennen.
Valideer de uitvoer daarna onafhankelijk. Neem een gegenereerde identificatie, voer die door een validator die je zelf hebt geschreven op basis van het gepubliceerde algoritme, en bevestig dat het controlecijfer slaagt. Die ene gewoonte vangt een hele klasse van verkeerde configuratie waarin een land is geselecteerd maar de regels van een buurland worden toegepast. Het artikel over veldconsistentie bij identiteit beschrijft de kruisveldcontroles die daarnaast de moeite waard zijn.
Elke identificatie die op deze manier wordt geproduceerd, is synthetische testdata. Het formaat, de lengte en het controlecijfer volgen de gepubliceerde regels zodat software kan worden beoefend, maar het nummer behoort tot geen enkele persoon, het is nooit door enige autoriteit uitgegeven, en het mag niet worden gebruikt om iemand na te doen, om een echt account te openen of te registreren, om een echte identiteitsverificatie te doorstaan, of om enig voordeel of document te verkrijgen.