De SSN-indeling is een van die kleine stukjes kennis die stilletjes bepaalt of een validatieregel voor een formulier correct is. Het nummer is negen cijfers lang, het wordt conventioneel in drie groepen geschreven, en een paar van de mogelijke combinaties erbinnen worden nooit aan iemand uitgegeven — feiten die eenvoudig te noemen zijn en verrassend makkelijk fout te coderen in een validatieroutine.
Dit artikel behandelt de structuur van het nummer, de reeksen die worden achtergehouden, wat de cijfers sinds 2011 niet meer betekenen, en waarom het nummer nooit een identiteitsbewijs was en dat nog steeds niet is.
De vorm van het nummer
De negen cijfers worden gelezen als drie blokken: drie cijfers, dan twee, dan vier. Uitgeschreven worden de blokken meestal gescheiden door koppeltekens, hoewel de koppeltekens een opmaakconventie zijn en geen deel van het nummer, en veel systemen slaan het op en drukken het af als één ononderbroken reeks.
Elk blok heeft een naam. De eerste drie cijfers zijn het area-nummer, de middelste twee het group-nummer en de laatste vier het serial-nummer. De namen kennen is vooral nuttig omdat de gereserveerde waarden per blok zijn gedefinieerd.
Behandel het geheel als tekst. Een voorloopnul binnen een blok is volkomen normaal en volledig legitiem, en elke opslagbeslissing die de waarde in een geheel getal verandert, vernietigt die stilletjes — een faalwijze die door de jaren heen heel wat formulieren heeft gebroken.
Welke reeksen worden nooit uitgegeven?
De instantie die het nummer uitgeeft, heeft publiekelijk verklaard dat bepaalde waarden niet worden gebruikt. In het area-blok wordt de waarde met allemaal nullen niet uitgegeven, de waarde van drie zessen niet, en het blok waarden vanaf negenhonderd niet. In het group-blok wordt het paar met allemaal nullen niet uitgegeven. In het serial-blok wordt de reeks met allemaal nullen niet uitgegeven.
Het patroon is het opmerken waard: in elk geval is de achtergehouden waarde een van de gedegenereerde — het uiterste lage einde of een bewust uitgesloten speciale waarde. Dat is een nuttige eigenschap voor wie een validator schrijft, want het betekent dat een handvol goedkope bereikcontroles een hele klasse van duidelijk verzonnen of verkeerd getypte nummers opvangt.
Het betekent niet dat de controles voldoende zijn. Erdoorheen komen bewijst alleen dat een nummer niet in een bekend onmogelijk bereik ligt; het zegt niets over de vraag of het nummer ooit is uitgegeven, en helemaal niets over wie het bezit.
Vertelt het eerste blok waar iemand geboren is?
Vroeger correleerde het met de staat waar het nummer werd aangevraagd, en de folklore die rond die correlatie groeide, overleefde de feitelijke praktijk met decennia. Sinds 2011 worden de nummers op gerandomiseerde basis toegewezen, dus de cijfers coderen niet langer een aanvraagplaats en hebben nooit een geboortedatum gecodeerd.
De praktische consequentie is dat elke regel die een regio, een geboortejaar of een uitgiftedatum afleidt uit de eerste cijfers nu onjuist is, en ook al onbetrouwbaar was vóór de wijziging omdat de koppeling regionaal was in plaats van persoonlijk. Validatiecode geschreven op basis van een tabel met staatsprefixen is de meest voorkomende manier waarop deze fout productie bereikt.
Is een SSN een identiteitsbewijs?
Nee. Het is een nummer dat voor een specifiek administratief doel is uitgegeven, en het is geen algemeen nationaal identiteitsbewijs, geen bewijs van staatsburgerschap en geen bewijs van wie iemand is. Het tonen van een nummer stelt iemands identiteit niet vast, en een systeem dat het nummer alleen als voldoende bewijs behandelt, vertrouwt op een geheim dat nooit geheim is geweest — het nummer wordt gevraagd door werkgevers, verhuurders, klinieken en nutsbedrijven, dus het wordt breed vastgelegd en breed gelekt.
Dat is de eerlijke inkadering van het hele onderwerp, en het is de reden waarom dit nummer zo slecht past bij testen waarbij echte mensen betrokken zijn. Een correct gevormde waarde is prima om te controleren dat een formulier negen cijfers in drie groepen accepteert. Een echte waarde in een testdatabase is een risico: hij is van iemand, hij kan niet meer ongelekt raken, en geen enkele mate van toegangscontrole op een stagingomgeving maakt die kopie veilig.
Hoe moet een formulier het nummer behandelen?
Verzamel het alleen wanneer er een echte reden is, sla het op in zo weinig plaatsen als de taak toelaat, maskeer het in elke interface die de volledige waarde niet strikt nodig heeft, en druk het nooit af in een logregel. Dat zijn keuzes op het gebied van gegevensverwerking, en ze gelden of het systeem nu een loonplatform is of een hobbyproject.
Aan de validatiekant: weersta de verleiding om slim te zijn. Een waarde afwijzen omdat de eerste drie cijfers niet in een lijst met erkende prefixen staan, wijst legitieme nummers af, omdat de lijst met geldige prefixen geen vaste geografie is en de alle-nullen-, alle-zessen- en hoge reeksen de enige waarden met een publieke regel zijn. Controleer de vorm, controleer de gereserveerde reeksen en laat de rest met rust.
Teams die het veld moeten beproeven zonder iemands echte nummer aan te raken, gebruiken een synthetische waarde. Records gegenereerd door de generator voor identiteits- en testgegevens vallen in die categorie: ze voldoen aan het formaat en vermijden de gereserveerde reeksen, en ze zijn verzonnen voor het testen, niet bruikbaar om iemand na te doen of om enige controle te doorstaan die het nummer tegen een uitgevend record verifieert.
Wat moet een validator controleren, en in welke volgorde?
Zes controles dekken bijna alles, en hun volgorde maakt alleen uit omdat de goedkoopste eerst moet lopen.
- De waarde is aanwezig en bestaat, zodra opmaaktekens zijn verwijderd, uitsluitend uit cijfers.
- Na het verwijderen van scheidingstekens is het precies negen cijfers lang.
- Het area-blok is niet allemaal nullen, niet de uitgesloten drie-zessen-waarde en lager dan negenhonderd.
- Het group-blok is niet allemaal nullen.
- Het serial-blok is niet allemaal nullen.
- Het veld wordt opgeslagen en vergeleken als tekst, zodat voorloopnullen behouden blijven.
Niets op die lijst is een controle dat het nummer bij een persoon hoort. Als een proces die garantie nodig heeft, heeft het een bron van waarheid buiten het formulier nodig, en het formulier kan die niet leveren.
Voor ontwikkelaars: wat er in de validatieregel hoort
Schrijf de regel als formaat plus gereserveerde reeksen en stop daar. Een opmerking die stelt dat de cijfers geen geografische betekenis hebben, is meer waard dan een extra vertakking, want anders herintroduceert de volgende persoon die het bestand bewerkt de prefixtabel die hij zich van een oud project herinnert.
Houd de fixture ook eerlijk. Gebruik een gegenereerde waarde, label de rij als synthetisch in de dataset zelf zodat een gelekte schermafbeelding zichzelf verklaart, en zorg dat niemand stilletjes een echt nummer heeft geplakt als gemak. Het nummer is geen algemene identificator, en een testsuite die het als zodanig behandelt, leert iedereen die het leest de verkeerde les. Records gebouwd voor het testen zijn precies dat — testartefacten die nooit de identiteit van een echt persoon mogen vervangen of ergens als zodanig mogen worden gepresenteerd.
Volgende stappen
Open uw validatieroutine en verwijder elke vertakking die een locatie of een jaar afleidt uit de eerste drie cijfers; die ene wijziging haalt al een terugkerende bron van valse afwijzingen weg. Genereer dan een reeks Amerikaanse records in de identiteitsgenerator en voer ze door het veld, inclusief één waarvan het serial-blok bewust allemaal nullen is om te bevestigen dat de controle op gereserveerde reeksen daadwerkelijk afgaat. Voor het bredere beeld van hoe identificatienummers tussen landen verschillen, is de gids over nationale ID-lengte de natuurlijke vervolgstap.