Een telefoonnummer dat is geschreven voor iemand in hetzelfde land is overal daarbuiten dubbelzinnig. Dezelfde cijfers betekenen een ander nummer, afhankelijk van of er een voorloopnul of een landnummer aanwezig is. E.164 neemt de dubbelzinnigheid weg door één geschreven vorm vast te leggen.
Wat definieert de standaard precies?
De structuur van internationale nummers, in acht afzonderlijke categorieën.
Aanbeveling ITU-T E.164, van de International Telecommunication Union, het VN-agentschap dat het nummerplan beheert, legt zowel de cijferstructuur als de routeringsanalyse vast voor elke categorie internationaal nummer:
Recommendation ITU-T E.164 provides the number structure and functionality for the eight categories of numbers used for international public telecommunication:
Die categorieën omvatten meer dan landnummers. Geografische gebieden zijn er één van de acht, naast wereldwijde diensten, overige wereldwijde diensten, wereldwijde satellietdiensten, netwerken, groepen landen, middelen voor proefgebruik, en diensten en toepassingen voor het Internet of Things en machine-naar-machineverkeer. De standaard levert ook de naam voor de nummers zelf:
Annex A provides additional information on the structure and function of international public telecommunication numbers (hereafter referred to as "international E.164 numbers").
Hoe ziet een correct geschreven nummer eruit?
Een landnummer, dan het nationale nummer, en verder niets.
+31612345678 is een Nederlands mobiel nummer. De 31 is het landnummer en 612345678 is het nationale nummer. Wat er ontbreekt is even belangrijk als wat er staat: geen spaties, geen streepjes, geen haakjes, geen voorloopnul uit de nationale belconventie, en geen internationaal toegangsnummer zoals 011 of 00.
De voorloop-+ is notatie, geen cijfer. Het vertelt alles wat de string leest dat er een internationaal nummer volgt. Niemand belt het. Sla dus de cijfers op. Behandel de interpunctie als presentatie.
Hoe lang kan een nummer zijn?
Lang genoeg dat je het beter niet kunt controleren.
De leesbare bron formuleert dit beperkter dan de regel doorgaans wordt aangehaald. De libphonenumber FAQ van Google past het getal van vijftien cijfers alleen op het nationale deel toe, en zegt dat niet alle landen zich eraan houden:
We support parsing and storing numbers from a minimum length of two digits to a maximum length of 17 digits currently (excluding country calling code). The ITU standard says the national significant number should not be longer than fifteen digits, but empirically this has been proven not to be followed by all countries.
Een validator die alles boven vijftien cijfers weigert, weigert dus echte nummers.
De praktische regel is: parse in plaats van meten. Een bibliotheek of een lookup beantwoordt of een nummer in een toewijsbaar bereik valt, iets wat een lengtecontrole niet kan. Wat controleert telefoonnummervalidatie behandelt wat elk type controle vaststelt.
Welke vormen accepteert Bird?
Het landnummer en het nationale nummer, met optionele interpunctie.
Je stuurt het landnummer gevolgd door het nationale nummer. Hoe je het internationale deel markeert is bewust soepel. De voorloop-+ is optioneel en 00 werkt in plaats daarvan, dus +31612345678, 31612345678 en 0031612345678 verwijzen allemaal naar hetzelfde nummer.
Wat het niet doet is raden. Een nummer dat geschreven is om binnen één land te bellen, zonder landnummer, wordt geweigerd in plaats van toegeschreven aan een bepaald land. Een formulier dat een nationaal nummer verzamelt zonder ook het land te vragen, levert precies die weigering op. Leg beide samen vast.
Wanneer je een nummer koopt, is de waarde die je stuurt precies degene die de inventaris teruggaf, niet een opnieuw opgemaakte kopie ervan. De lookup-gids behandelt de geaccepteerde vormen, en wat is een virtueel telefoonnummer behandelt wat een nummer kan doen als je het bezit.
Kort gezegd
Het is een ITU-aanbeveling, geen opmaakconventie.
ITU-T E.164 definieert de nummerstructuur voor acht categorieën internationale nummers, waaronder één voor machine-naar-machinediensten.
Het plusteken is notatie, geen cijfer.
Het geeft aan dat wat volgt een internationaal nummer is en niet iets om te bellen, en daarom zijn de cijfers het deel dat klopt moet zijn.
Valideer niet op lengte.
De nummerbibliotheek van Google vermeldt een richtlijn van vijftien cijfers uit de ITU-standaard en zegt dat niet alle landen zich eraan houden.
Een nummer zonder landnummer is geen E.164-nummer.
Bird weigert een nummer zonder landnummer in plaats van te raden bij welk land het hoort. Sla het landnummer erbij op.