Numer telefonu zapisany dla kogoś w tym samym kraju jest niejednoznaczny wszędzie indziej. Te same cyfry oznaczają inny numer w zależności od tego, czy obecne jest wiodące zero, czy kod kraju. E.164 usuwa tę niejednoznaczność, ustalając jedną formę zapisu.
Co właściwie definiuje ten standard?
Strukturę numerów międzynarodowych w ośmiu osobnych kategoriach.
Zalecenie ITU-T E.164, wydane przez Międzynarodowy Związek Telekomunikacyjny, agencję ONZ administrującą planem numeracji, ustala zarówno strukturę cyfrową, jak i analizę trasowania dla każdej kategorii numeru międzynarodowego:
Recommendation ITU-T E.164 provides the number structure and functionality for the eight categories of numbers used for international public telecommunication:
Te kategorie obejmują więcej niż numery krajowe. Obszary geograficzne to jedna z ośmiu, obok usług globalnych, innych usług globalnych, globalnych usług satelitarnych, sieci, grup krajów, zasobów do celów próbnych oraz usług i aplikacji dla Internetu rzeczy i komunikacji między maszynami. Standard podaje też nazwę samych numerów:
Annex A provides additional information on the structure and function of international public telecommunication numbers (hereafter referred to as "international E.164 numbers").
Jak wygląda poprawnie zapisany numer?
Kod kraju, potem numer krajowy i nic więcej.
+31612345678 to holenderski numer komórkowy. 31 to kod kraju, a 612345678 to numer krajowy. To, czego brakuje, jest równie ważne jak to, co jest: żadnych spacji, łączników, nawiasów, wiodącego zera z krajowej konwencji wybierania ani międzynarodowego prefiksu dostępu, takiego jak 011 czy 00.
Wiodący + to notacja, nie cyfra. Informuje cokolwiek, co czyta ciąg znaków, że następuje numer międzynarodowy. Nikt go nie wybiera. Przechowuj więc cyfry. Traktuj interpunkcję jako prezentację.
Jak długi może być numer?
Wystarczająco długi, żeby nie warto było sprawdzać.
Czytelne źródło formułuje to węziej, niż zwykle cytuje się tę regułę. FAQ libphonenumber od Google odnosi piętnastocyfrowy limit wyłącznie do części krajowej i zaznacza, że nie wszystkie kraje go przestrzegają:
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.
Walidator odrzucający wszystko powyżej piętnastu cyfr odrzuci więc prawdziwe numery.
Praktyczna zasada to parsować, a nie mierzyć. Biblioteka lub zapytanie lookup odpowiada, czy numer mieści się w przydzielonym zakresie, czego porównanie długości nie jest w stanie ustalić. Co sprawdza walidacja numeru telefonu opisuje, co ustala każdy rodzaj sprawdzenia.
Jakie formy akceptuje Bird?
Kod kraju i numer krajowy, z opcjonalną interpunkcją.
Wysyłasz kod kraju, a po nim numer krajowy. Sposób oznaczenia części międzynarodowej jest celowo swobodny. Wiodący + jest opcjonalny, a 00 działa w jego miejsce, więc +31612345678, 31612345678 i 0031612345678 oznaczają ten sam numer.
Nie będzie jednak zgadywać. Numer zapisany do wybierania wewnątrz jednego kraju, bez kodu kraju, zostanie odrzucony, zamiast zostać przypisanym do jakiegokolwiek kraju. Formularz zbierający numer krajowy bez jednoczesnego zbierania kraju spowoduje dokładnie takie odrzucenie. Zbieraj oba razem.
Kupując numer, wysyłaj dokładnie tę wartość, którą zwrócił inwentarz, a nie jej przeformatowaną kopię. Przewodnik po lookup opisuje akceptowane formy, a czym jest wirtualny numer telefonu wyjaśnia, co numer może robić, gdy już go posiadasz.
W skrócie
To zalecenie ITU, nie konwencja formatowania.
ITU-T E.164 definiuje strukturę numerów dla ośmiu kategorii numerów międzynarodowych, w tym jednej dla usług komunikacji między maszynami.
Znak plus to notacja, nie cyfra.
Oznacza, że po nim następuje numer międzynarodowy, a nie coś do wybrania na klawiaturze, dlatego to cyfry muszą być poprawne.
Nie waliduj po długości.
Biblioteka numerów Google podaje piętnastocyfrową wytyczną ze standardu ITU i zaznacza, że nie wszystkie kraje jej przestrzegają.
Numer bez kodu kraju nie jest numerem E.164.
Bird odrzuca numer wyłącznie krajowy, zamiast zgadywać, do jakiego kraju należy. Przechowuj kod kraju razem z numerem.