De lengte van een nationale ID is het eerste dat breekt wanneer een team een formulier internationaliseert. Een kolom die is bemeten op het nummer dat het ene land uitgeeft, kapt stilletjes het nummer af dat een ander land uitgeeft, en de fout komt meestal maanden later aan het licht als een supportticket over een klant die zich niet kan registreren.
Dit artikel loopt de manieren door waarop identificatienummers tussen landen verschillen, waarom hetzelfde land zijn formaat in de loop der tijd kan wijzigen, en hoe u een validatiepad bouwt dat beide problemen overleeft.
Waarom er geen universele lengte is
Identificatienummers zijn ontworpen door nationale overheden, voor nationale doeleinden, lang voordat iemand zich een formulierveld voorstelde dat ze allemaal tegelijk moest kunnen bevatten. Elk ontwerp weerspiegelt een andere theorie over waarvoor het nummer dient, en die theorie komt tot uiting in de vorm.
Sommige nummers zijn pure cijfers, bemeten zodat de bevolking de ruimte nooit kan uitputten. Sommige mengen letters en cijfers om ruimte te winnen zonder langer te worden. Sommige reserveren de leidende tekens voor een categorienummer, een uitgevend kantoor of een regio. Sommige sluiten de geboortedatum van de houder in. Sommige voegen een of twee controlecijfers toe die rekenkundig uit de rest worden berekend.
Omdat de ontwerpen verschillen, verschillen de lengtes. Nummers lopen van een handvol tekens in de kleinste systemen tot ruim meer dan een dozijn in de grootste, en de spreiding is breed genoeg dat elke vaste-breedteregel ergens onjuist is.
De families van identificatienummers
De nummers groeperen op ontwerp in plaats van op land is het nuttigste mentale model, omdat de validatieconsequenties het ontwerp volgen en niet de kaart.
| Familie | Typische vorm | Wat het betekent voor validatie |
|---|---|---|
| Puur numeriek | Alleen cijfers, vaak met een voorloopnul | Moet als tekst worden opgeslagen; nooit naar een geheel getal parsen |
| Alfanumeriek | Letters en cijfers gemengd op bepaalde posities | Controles positie voor positie, niet één enkele tekentelling |
| Datumdragend | Geboortedatum verweven in de leidende tekens | De datum moet een echte kalenderdatum zijn, wat de meeste regels vergeten |
| Met controlecijfers | Rekenkundige controletekens aan het einde | De laatste tekens zijn verifieerbaar, maar alleen volgens de gepubliceerde regel |
| Vrij vorm | Geen structuur waarop iemand kan vertrouwen | Lengte- en tekenlimieten zijn de enige eerlijke controles |
Waar een nummer controletekens draagt, is de rekenkunde meestal een gewogen som met een modulus erop toegepast — hetzelfde brede idee dat veel nummeringsschema’s gebruiken, wat de reden is waarom één conceptuele uitleg meerdere landen kan dienen ook al verschillen de constanten. Wat een geslaagde controlecijfercontrole bewijst, is smal en moet duidelijk worden vermeld waar het ook wordt gedocumenteerd: het nummer is intern consistent, niet dat het aan iemand is uitgegeven.
Moet de veldlengte vast zijn?
Nee, en dit is de meest schadelijke aanname op dit gebied. Een vaste lengte kapt ofwel de langere formaten af of vult de kortere op, en beide beschadigen de waarde. Opvullen is in één opzicht erger dan afkappen: een opgevuld nummer ziet er plausibel uit, dus het glipt stilletjes door naar stroomafwaartse systemen voordat iemand het merkt.
Sla identificatienummers op als tekst met variabele lengte en handhaaf een ruime bovengrens. De grens bestaat om te voorkomen dat een plakongeluk een kolom met een opstel vult, niet om te stellen dat elk land zoveel tekens gebruikt. Als de toepassing een landspecifieke regel nodig heeft, pas die dan voorwaardelijk toe, nadat het land bekend is.
Er is een tweede reden om de kolom ruim te houden. Een land kan zijn formaat wijzigen, en wanneer dat gebeurt, moeten bestaande records blijven werken terwijl nieuwe de nieuwe regel volgen. Een kolom die precies de oude lengte had, heeft geen ruimte voor de overgang.
Wat gebeurt er wanneer een land zijn formaat wijzigt?
Formaten wijzigen wel, en niet alleen op kleine manieren. Een land kan een nummer verlengen wanneer de bevolking de ruimte ontgroeit, een controlecijfer toevoegen om invoerfouten te verminderen, de interne blokken reorganiseren, of het ene schema vervangen door een volledig ander en houders een overgangsperiode geven waarin beide geldig zijn.
Voor wie validatie schrijft, is de les dat de regel een ingangsdatum heeft. Een controleur die alleen de huidige vorm accepteert, wijst elk record af dat onder de vorige is uitgegeven, en die records blijven geldig zolang het land zegt dat ze dat zijn. Een controleur die alleen de oude vorm accepteert, is erger.
In de praktijk betekent dit twee dingen: houd de validatieregels gedateerd in plaats van tijdloos, en laat het afwijzingsbericht beschrijven wat er mis is met de waarde in plaats van aan te kondigen dat het nummer van de persoon niet bestaat. Een formulier dat een legitieme houder beschuldigt van een nepnummer, genereert supportlast.
Waar helpen controlecijfers echt?
Controletekens zijn het implementeren waard wanneer de regel is gepubliceerd, omdat ze de twee meest voorkomende invoerfouten opvangen: een verkeerd getypt teken en twee aangrenzende tekens in de verkeerde volgorde getypt. Beide veranderen de rekenkunde en zijn dus beide detecteerbaar.
Het voordeel houdt daar op. Een controlecijfer vertelt u niet of het nummer van iemand is, bevestigt niet dat de persoon die het noemt de houder is, en maakt het nummer geen bewijsstuk. Elk proces dat een geslaagd controlecijfer als verificatie van identiteit behandelt, vertrouwt op rekenkunde voor een taak die rekenkunde niet kan vervullen.
Voor het testen bepaalt dat onderscheid waar de controlecijferlogica hoort. Het is een regel voor gegevenskwaliteit — nuttig op het punt van invoer om typefouten op te vangen, en nuttig in een testsuite om te bevestigen dat een generator intern consistente waarden produceert. Het is geen authenticatieregel, en een fixture die het als zodanig behandelt, codeert een beveiligingsaanname die niet waar is. Waarden geproduceerd door de generator voor identiteits- en testgegevens zijn formaatcorrecte synthetische records, en ze zijn bedoeld om regels zoals deze te beproeven; het zijn geen echte nummers en ze kunnen niet worden gebruikt om als iemands identiteit door te gaan.
Hoe gaat u om met een land dat u niet heeft gemodelleerd?
Houd een eerlijke terugvaloptie. Wanneer het land onbekend is, of bekend maar niet gemodelleerd, accepteer dan een breed scala aan tekens en lengtes, leg het land vast naast de waarde, en markeer het record als ongevalideerd in plaats van het stilletjes als in orde te behandelen.
Twee ontwerpdetails maken de terugvaloptie bruikbaar. Ten eerste, maak ongevalideerde records zichtbaar in monitoring, zodat het gat in de dekking een bekend gegeven is in plaats van een verrassing. Ten tweede, laat het terugvalpad nooit het pad zijn dat in productie loopt voor een land dat u al heeft gemodelleerd — de losse regel is een vangnet, en een vangnet dat alles opvangt, verhindert dat de strikte regel ooit afgaat.
Een uitgewerkte vergelijking is het eenmalig waard om te bouwen. Neem hetzelfde persoonsvormige record, render het volgens de regels van meerdere landen, en controleer dat het veld ze allemaal bevat zonder opvulling. Velden die die vergelijking overleven, zijn meestal de velden die vanaf het begin als tekst zijn getypt.
Voor ontwikkelaars: het ontwerpen van het identificatieveld
Vier beslissingen dragen het meeste gewicht wanneer het veld wordt gedefinieerd: het kolomtype, de maximale lengte, de tekenset en waar de validatie leeft. Krijg de eerste drie goed en de vierde wordt eenvoudig.
- Type: tekst met variabele lengte, altijd, met normalisatie beperkt tot het verwijderen van scheidingstekens.
- Lengte: een ruime bovengrens in plaats van een exacte grootte, gekozen zodat het langste bekende nationale formaat past met ruimte over.
- Tekenset: wat de vereniging van de gemodelleerde landen ook gebruikt, wat in de praktijk letters en cijfers betekent met diakritische tekens weggenormaliseerd.
- Validatie: één vertakking per gemodelleerd land, aangestuurd op de landwaarde, plus een gedocumenteerde terugvaloptie die nooit een gemodelleerde regel overschrijft.
Regel ook de kant over velden heen. Een identificator is alleen betekenisvol samen met het land dat hem uitgaf en, in sommige landen, met een geboortedatum, dus die drie velden moeten als een groep door fixturebestanden reizen. En houd de fixture-notitie expliciet: dit zijn synthetische identificatoren die voor softwaretesten zijn gegenereerd, geen echte nummers, en niets eraan mag als bewijs van iemands identiteit worden gepresenteerd.
Volgende stappen
Controleer de lengte van de identificatorkolom in uw schema en vergelijk die met het langste formaat dat u zegt te ondersteunen; als het hetzelfde getal is, is de kolom te klein. Genereer dan een spreiding van records in de identiteitsgenerator over meerdere landen en bevestig dat elk uw regels doorstaat, inclusief één uit een land dat u niet heeft gemodelleerd, om te bewijzen dat de terugvaloptie werkt. Als uw nummers controlecijfers dragen, toont de uitleg over controlecijfers op deze site hoe de rekenkunde is opgebouwd.