Een telefoonnetnummer voelt als een locatiestempel. Het staat naast een adres in hetzelfde formulier, het is vaak het enige geografisch lijkende deel van het nummer, en het is verleidelijk om het als nog een veld te behandelen dat tegen een plaats moet worden gecontroleerd. Die neiging was decennia geleden redelijk en is nu onbetrouwbaar.
Dit artikel legt uit hoe internationale kiesschijfprefixen en binnenlandse netnummers werkelijk zijn gestructureerd, waarom mobiele nummers en nummerportabiliteit de geografische band verbreken, en wat een consistentiecontrole tussen adres en telefoon eerlijk kan afdwingen in testdata of in productie.
Landcode, netnummer en abonneenummer
Een internationaal telefoonnummer heeft drie delen: een landkiesschijfprefix, een nationaal bestemmingsdeel dat een regionaal netnummer kan bevatten, en het abonneenummer. Landkiesschijfprefixen zijn kort — één tot drie cijfers — en ze zijn toegewezen als onderdeel van een wereldwijd nummerplan, wat internationaal kiezen voorspelbaar maakt.
Binnen een land wordt de structuur van het nationale deel door de toezichthouder van dat land bepaald, en die varieert enorm. Sommige landen gebruiken een nationaal nummer met vaste lengte en een regionaal prefix dat altijd dezelfde lengte heeft. Andere gebruiken nummers met variabele lengte, waar het netnummer en het abonneedeel cijfers uitwisselen afhankelijk van de regio en de dienst. Sommige korten de code af bij binnenlands kiezen en eisen hem bij kiezen vanuit het buitenland.
Twee gevolgen volgen voor iedereen die deze gegevens opslaat. Ten eerste heeft hetzelfde nummer verschillende geldige geschreven vormen, en ze verschillen in meer dan interpunctie: de internationale vorm kan een prefix bevatten die de binnenlandse vorm weglaat, en de groepering van cijfers kan veranderen. Ten tweede heeft de totale lengte van een nummer een gedefinieerd maximum maar niet één wereldwijde waarde, dus een strikte lengteregel wijst ergens geldige nummers af.
Is het netnummer nog een locatie?
Zwakker dan vroeger, en elk jaar zwakker. Verschillende gewone ontwikkelingen eroderen de band tussen een nummer en een plaats.
- Mobiele nummers dragen vaak helemaal geen geografische informatie. In veel landen worden ze uitgegeven uit blokken die niet aan een regio zijn gebonden, dus een nummer zegt je niets over waar de eigenaar is.
- Nummerportabiliteit laat een abonnee een nummer behouden terwijl hij tussen operators verhuist, en in verschillende landen ook tussen regio’s. Een nummer dat op de ene plek is uitgegeven, kan ergens anders in gebruik zijn.
- Voice-over-internetbellen koppelt het nummer los van elke fysieke lijn. Een nummer kan in het ene land worden gekocht en in een ander worden beantwoord zonder dat de beller het merkt.
- Mensen verhuizen en behouden hun nummers. Vastelijnnummers worden na een verhuizing binnen hetzelfde land vaak behouden.
De juiste uitspraak is dat een netnummer op zijn best vastlegt waar een nummer voor het eerst is uitgegeven. Het is geen huidige locatie, en het is geen bewijs van woonplaats.
Wat kan een consistentiecontrole werkelijk afdwingen?
Niet veel, en het kennen van de grenzen is wat de controle nuttig maakt. Er zijn drie sterktes beschikbaar, en ze moeten bewust worden gekozen.
Een harde regel is er een die kan worden afgedwongen zonder valse afwijzingen: het nummer past bij de verwachte vorm voor het opgegeven land, het bevat alleen de toegestane tekens, en de lengte valt binnen het bereik dat dat land toestaat. Deze zijn veilig af te dwingen op het moment van invoer.
Een zacht signaal is er een dat het waard is naar boven te halen maar niet te blokkeren: het netnummer komt overeen met een andere regio dan het adres, of het nummer is mobiel waar het formulier een vaste lijn impliceert. Deze zijn een waarschuwing waard in een interne tool en nooit een harde fout op een publiek formulier.
Een statistische gok — een plaats uit een nummer afleiden, of een operator afleiden, en dat als feit opslaan — is degene die je volledig moet vermijden. Hij zal vaak genoeg fout zijn om schadelijk te zijn, en omdat de uitvoer op een schoon veld lijkt, zal niemand downstream hem in twijfel trekken.
Waarom testdata de consistentiecontrole nog steeds nodig heeft
Testdata is waar een losse geografische aanname het meeste schade doet, omdat fixtures met de hand worden gebouwd en dan vertrouwd. Als een fixture een nummer uit het nummerplan van het ene land koppelt aan een adres in een ander, slaagt elke test die het nummer raakt terwijl ze niets test, en een echt defect in het telefoonveld blijft verborgen tot productie.
De nuttige controles voor een fixtureset zijn bescheiden. De landkiesschijfprefix komt overeen met het adresland. De lengte en tekenset van het nummer komen overeen met het plan voor dat land. Het nationale deel is plausibel voor het type nummer dat het veld claimt te bevatten. Alles daarbuiten — beweren dat het netnummer overeenkomt met de plaats in het record — beweert iets dat ook niet waar is van echte gegevens, en een fixture die het afdwingt, traint het team op een valse regel.
Fixtures moeten ook de lastige gevallen bevatten: een nummer in internationale vorm en hetzelfde nummer in binnenlandse vorm, een nummer met een regionale code die niet overeenkomt met het adres, en een mobiel nummer zonder enige regionale informatie. Het verschil tussen die gevallen en de tegenvoorbeelden is het punt van de set. De vorm van een goed georganiseerde fixtureset wordt beschreven in adresgegevens in testfixtures.
Voor ontwikkelaars: opslag, groepering en weergave
Bewaar de landkiesschijfprefix apart van het nationale nummer. Het paar is ondubbelzinnig; één veld met een internationaal nummer in een lokaal conventioneel formaat is dat niet, en elke consument herimplementeert dan parsing om de delen terug te vinden.
Bewaar het nationale nummer als een reeks cijfers, zonder interpunctie of groepering. Interpunctie is een weergavekwestie, en groeperingsregels verschillen tussen landen en zelfs tussen nummertypes, dus het opgeslagen groeperingsformaat legt een opmaakbeslissing vast die ergens fout zal zijn. Normaliseer bij invoer, op één grens, zoals bij elke identificatie.
Houd voor weergave de opmaakregels per land bij de andere conventies van dat land. En wees voorzichtig met het internationale prefix — het plusteken en de cijfers die erop volgen zijn de enige vorm die wereldwijd ondubbelzinnig is, terwijl het prefix om een internationale lijn te bereiken per land verschilt en geen deel van het nummer is.
Behandel ten slotte een telefoonnummer als persoonsgegeven op dezelfde manier als een adres. Het identificeert een individu, dus de regels voor minimalisatie, bewaring en testomgeving die op adressen van toepassing zijn, gelden hier ook. De gedeelde verplichtingen staan in privacy van adresgegevens. Als je gegevens ook landcodes dragen, worden de valkuilen van de verschillende vormen behandeld in ISO-land- en onderindelingscodes.
Volgende stappen
Neem de telefoonkolom in je schema en controleer drie dingen: dat de landcode apart is opgeslagen, dat het nationale deel tekst en zonder interpunctie is, en dat validatie beperkt blijft tot vorm in plaats van geografie. Voeg daarna één fixture toe waarin het nummer en het adres opzettelijk uit verschillende regio’s komen, en zorg dat je tests verwachten dat het wordt geaccepteerd met een waarschuwing in plaats van afgewezen. Zowel het adres als het nummer voor een voorbeeldrecord zijn beschikbaar in de adresgenerator. Dat record is synthetisch — samengesteld om het formulier te testen, niet om te bellen of iets te bezorgen.