Международный формат телефонных номеров
Международный формат телефонных номеров
Мы привыкли записывать телефонный номер, начиная с восьмерки. Поэтому когда где-либо требуется записать или ввести на сайте номер телефона в международном формате, то сразу в голове масса вопросов.
Подробно рассказываем, как набрать номер телефона в международном формате, и откуда вообще взялся этот формат.
Российские номера сотовых телефонов в международном формате состоят из трех элементов:
Итак, чтобы записать номер в международном формате, следует набрать 11 цифр, не считая знака плюсика. Эта комбинация используется для звонков из зарубежных стран в Россию, внутри страны можно звонить, набирая вместо +7 восьмерку. В книге контактов лучше сразу сохранять номера в международном формате, потому что зачастую звонки через восьмерку не проходят.
Номер «Мегафон» в международном формате имеет префиксы 920-929, 936 и 937. Номера МТС в международном формате отличаются префиксом 910-919, 980-989. Номера «Билайн» в международном формате легко узнать по префиксам 903-909, 961-968, 976.
Однако стоит учитывать, что номера в одном коде могут быть разделены регулятором между несколькими операторами. Это связано с тем, что номерной ресурс ограничен, и выделить всем операторам, а их зарегистрировано более ста, коды с необходимым количеством номеров, невозможно.
Строго говоря, любые российские сотовые номера сразу пишутся в международном формате, так как без кода страны и кода оператора позвонить по ним невозможно.
В международном формате можно набрать и любой городской (местный) номер. Если вам нужно позвонить, к примеру, в отель за рубежом, со стационарного телефона следует набрать 8-10-<код страны>—<код города>— номер абонента. А вот с сотового номера нужно набирать вместо 8-10 — плюс и код страны.
Международный формат номеров США, Украины, Белоруссии
Цифра +7 определяет принадлежность номера к российской телефонной сети. Для других стран зарезервированы иные коды. Американский сотовый номер выглядит так:
Каждый штат США имеет свой префикс, а вот привязки номера телефона к оператору в США не существует. В одном штате может быть несколько вариаций префиксов.
Например, в Нью-Йорке используются коды 347, 212 и 646. В то же время, абонент с этим номером может переехать в какой угодно штат, роуминга внутри страны нет, так что по этим цифрам можно определить только, в каком штате номер был впервые зарегистрирован.
Также цифры, идущие после +1 в международном американском номере, позволяют определить, со стационарного или сотового номера вам звонят. К примеру, 212 код стационарной сети Нью-Йорка (но не в 100% случаев).
У каждого сотового оператора Украины, соответственно, свои коды:
Хотя у Казахстана код страны совпадает с Россией, их номера определяются по префиксу: они имеют формат +7(6xx)xxx-xx-xx или +7(7xx)xxx-xx-xx. Префиксы российских сотовых операторов принадлежат исключительно диапазону (9хх).
Отметим, что на территории страны также действует нумерация с кодом начинающимся на восьмерку. Также, как в России, это специальные многоканальные номера. К примеру, 800 для бесплатных звонков с любого казахстанского номера.
Теория появления международного формата номера
Последовательность набора номера определяется телефонным планом нумерации — унифицированной системой, позволяющей пользователям сети отправлять и принимать звонки, а также определять звонящего (услуга определения номера включена во все тарифные планы сотовых операторов).
В мире существует два плана нумерации: открытый и закрытый. При первом местные вызовы можно совершать без национального номера (кода города), а при втором, то есть закрытом, необходимо набирать полный международный формат номера для звонка любого вида: местного, междугороднего, международного.
В основном страны применяют закрытый план нумерации, Москва сегодня полностью переведена на него. Отметим, что популярный термин “прямой номер” появился до того, как введен закрытый план. “Кривым”, на самом деле, является не номер с городским кодом, а тот, что можно набирать напрямую без кода города/оператора.
По планам Министерства коммуникаций и связи, к 2020 году Россия должна полностью перейти на закрытый план нумерации. Это означает, что в городах нельзя будет набирать короткие 5-7-значные номера для местных вызовов, а всегда будет необходимо использовать полный международный формат номера.
Сейчас у нас есть различие в наборе комбинаций при звонках внутри телефонной зоны, за ее пределы и при междугородних вызовах.
Если говорить о вызовах со стационарных телефонов, то для выхода на межгород нужно набирать 8-ку (в других странах 0).
При закрытом плане нумерации всегда нужно будет набирать расширенный вариант, то есть с +7 и кодом города.
Страны редко меняют план нумерации, но в ближайшем будущем это предстоит россиянам. Большинство абонентов не почувствуют разницы, ведь в телефонной книге смартфона удобно сразу сохранять длинную версию номера, лишь только редким пользователям стационарных телефонов придется всегда набирать длинные номера в международном формате.
Резюме
Российский номер сотового телефона в международном формате состоит из 11 цифр, где +7 — это международный идентификатор страны, (9хх) — префикс оператора, также показывающий регион регистрации номера, а дальше идет семизначный номер абонента.
Для правильного набора местных номеров в международном формате нужно предварительно выяснить код города.
Преобразование номеров в международный формат
Данный инструмент создан исключительно для удобства пользователей.
Преобразование номера проходит в 2 этапа:
Все номера телефонов, введенные Вами, очищаются от лишних символов. Например, номер телефона, введенный как «8(900)377-99-77» после «очистки» будет выглядеть как 89003779977. Очистка номеров от лишних символов производится в любом случае и не зависит ни от каких настроек.
Если при вводе нового контакта нажат значок глобуса «В международный формат», производится преобразование номера в международный формат для соответствующей страны.
Например, международный код России +7. Номер телефона в предыдущем примере (89003779977) принадлежит России, но не начинается с +7. Поэтому он будет преобразован в 79003779977, то есть к номеру телефона (который для России состоит из 10 цифр) приписывается первое число обозначающее код страны (в данном случае +7), а знак + убирается.
Также может быть что в номере вообще не указано никакое число перед номером телефона. Например, 9003779977. В таком случае, если значок глобуса «В международный формат» нажат, он также будет преобразован в 79003779977, в соответствии с вашей выбранной в настройках страной.
Отправка смс за границу
Поэтому, если Вы хотите отправить сообщение за границу, Вам необходимо воспользоваться одним из следующих способов:
При отправке сообщения за границу Вам необходимо самостоятельно следить за тем, чтобы номера телефонов соответствовали международному формату.
Рассмотрим на примере отправку сообщения в Великобританию, код страны +44. Номера в местном формате выглядят так: 09003779977. При отправке сообщения на такой номер Вы не получите положительного результата. Необходимо указать номер в межународном формате, он должен выглядеть так: 449003779977. Соответственно, при отправке сообщения Вы можете указать его прямо так, или со знаком «+» в начале номера.
Внимание! Чтобы избежать ошибки, обратите внимание на следующий момент: если нажать значок глобуса «В международный формат» (при этом в настройках у вас установлена, например, страна Россия), и ввести номер БЕЗ знака «+» (т.е. 449003779977), то система попытается привести данный номер в международный формат предполагая что это Российский номер, и номер будет сохранен как 79003779977, что вообще не соотвествует тому номеру который вы вводили, поэтому рекомендуется всегда ставить знак «+» и вводить номера в международном формате для номеров, страна которых отлична от вашей страны, выставленной в настройках. То есть указывая номер контакта в международном формате +449003779977, вы избежите ошибок с преобразованием.
Номера телефонов в международном формате в России
Мы привыкли записывать телефонный номер, начиная с восьмерки. Поэтому когда где-либо требуется записать или ввести на сайте номер телефона в международном формате, то сразу в голове масса вопросов.
Подробно рассказываем, как набрать номер телефона в международном формате, и откуда вообще взялся этот формат.
Российские номера сотовых телефонов в международном формате состоят из трех элементов:
Итак, чтобы записать номер в международном формате, следует набрать 11 цифр, не считая знака плюсика. Эта комбинация используется для звонков из зарубежных стран в Россию, внутри страны можно звонить, набирая вместо +7 восьмерку. В книге контактов лучше сразу сохранять номера в международном формате, потому что зачастую звонки через восьмерку не проходят.
Номер «Мегафон» в международном формате имеет префиксы 920-929, 936 и 937. Номера МТС в международном формате отличаются префиксом 910-919, 980-989. Номера «Билайн» в международном формате легко узнать по префиксам 903-909, 961-968, 976.
Однако стоит учитывать, что номера в одном коде могут быть разделены регулятором между несколькими операторами. Это связано с тем, что номерной ресурс ограничен, и выделить всем операторам, а их зарегистрировано более ста, коды с необходимым количеством номеров, невозможно.
Строго говоря, любые российские сотовые номера сразу пишутся в международном формате, так как без кода страны и кода оператора позвонить по ним невозможно.
В международном формате можно набрать и любой городской (местный) номер. Если вам нужно позвонить, к примеру, в отель за рубежом, со стационарного телефона следует набрать 8-10-<код страны>—<код города>— номер абонента. А вот с сотового номера нужно набирать вместо 8-10 — плюс и код страны.
Международный формат номеров США, Украины, Белоруссии
Цифра +7 определяет принадлежность номера к российской телефонной сети. Для других стран зарезервированы иные коды. Американский сотовый номер выглядит так:
Каждый штат США имеет свой префикс, а вот привязки номера телефона к оператору в США не существует. В одном штате может быть несколько вариаций префиксов.
Например, в Нью-Йорке используются коды 347, 212 и 646. В то же время, абонент с этим номером может переехать в какой угодно штат, роуминга внутри страны нет, так что по этим цифрам можно определить только, в каком штате номер был впервые зарегистрирован.
Также цифры, идущие после +1 в международном американском номере, позволяют определить, со стационарного или сотового номера вам звонят. К примеру, 212 код стационарной сети Нью-Йорка (но не в 100% случаев).
У каждого сотового оператора Украины, соответственно, свои коды:
Хотя у Казахстана код страны совпадает с Россией, их номера определяются по префиксу: они имеют формат +7(6xx)xxx-xx-xx или +7(7xx)xxx-xx-xx. Префиксы российских сотовых операторов принадлежат исключительно диапазону (9хх).
Отметим, что на территории страны также действует нумерация с кодом начинающимся на восьмерку. Также, как в России, это специальные многоканальные номера. К примеру, 800 для бесплатных звонков с любого казахстанского номера.
Теория появления международного формата номера
Последовательность набора номера определяется телефонным планом нумерации — унифицированной системой, позволяющей пользователям сети отправлять и принимать звонки, а также определять звонящего (услуга определения номера включена во все тарифные планы сотовых операторов).
В мире существует два плана нумерации: открытый и закрытый. При первом местные вызовы можно совершать без национального номера (кода города), а при втором, то есть закрытом, необходимо набирать полный международный формат номера для звонка любого вида: местного, междугороднего, международного.
В основном страны применяют закрытый план нумерации, Москва сегодня полностью переведена на него. Отметим, что популярный термин “прямой номер” появился до того, как введен закрытый план. “Кривым”, на самом деле, является не номер с городским кодом, а тот, что можно набирать напрямую без кода города/оператора.
По планам Министерства коммуникаций и связи, к 2020 году Россия должна полностью перейти на закрытый план нумерации. Это означает, что в городах нельзя будет набирать короткие 5-7-значные номера для местных вызовов, а всегда будет необходимо использовать полный международный формат номера.
Сейчас у нас есть различие в наборе комбинаций при звонках внутри телефонной зоны, за ее пределы и при междугородних вызовах.
Если говорить о вызовах со стационарных телефонов, то для выхода на межгород нужно набирать 8-ку (в других странах 0).
При закрытом плане нумерации всегда нужно будет набирать расширенный вариант, то есть с +7 и кодом города.
Страны редко меняют план нумерации, но в ближайшем будущем это предстоит россиянам. Большинство абонентов не почувствуют разницы, ведь в телефонной книге смартфона удобно сразу сохранять длинную версию номера, лишь только редким пользователям стационарных телефонов придется всегда набирать длинные номера в международном формате.
Резюме
Российский номер сотового телефона в международном формате состоит из 11 цифр, где +7 — это международный идентификатор страны, (9хх) — префикс оператора, также показывающий регион регистрации номера, а дальше идет семизначный номер абонента.
Для правильного набора местных номеров в международном формате нужно предварительно выяснить код города.
С развитием в стране смартфонов, различных соединений и возможности позвонить в другое государство по беспроводной связи сформировались и правила набора. Это комбинация цифр, позволяющая записать номер телефона и позвонить гражданину, который пребывает за пределами РФ. Россияне привыкли записывать свою нумерацию через восьмерку, но через нее нельзя сделать дозвон до гражданина, находящегося за границей России.
И когда требуется набор номера в другом государстве, то в голове возникает немало вопросов.
Правила набора международного формата
Порядок набора нумерации сотового абонента, который находится за пределами Российского государства, несколько отличается от стандартного звонка по России. Осуществить звонок по России можно, набрав номер как по внутренней комбинации, так и по международной. Человек сможет дозвониться до абонента и в том, и другом случае. А вот если осуществлять звонок в другое государство, то нужно придерживаться определенных правил. В частности:
При использовании такого алгоритма действий можно позвонить в любую другую страну.
При желании позвонить в иное государство или страну лучше воспользоваться таксофоном или домашним телефоном. Если же звонок совершать через мобильного оператора, даже при самом дешевом тарифе, нужно будет оплатить и международный звонок по тарифу, и карту использования (если таковая присутствует для звонков за границу). Дополнительно списываются денежные средства еще и за местное соединение, которое указано на карточке.
Чтобы позвонить из России, необходимо сделать выход на связь другого государства при помощи номеров соединения фиксированного вида. К примеру, 8-10- (код государства) (далее комбинация района) (персональная нумерация абонента).
Международный формат номера телефона Е164
Код Е164 часто встречается при наборе формата для звонков в иные государства. Это рекомендация МСЭ-Т, что позволяет уточнить план нумерации каждой страны для голосового соединения. Стандарт распространяется для эры ISDN. Особенности цифрового значения:
Часто используется стандарт не только Е164, но и Е123. Последней версией стандарта считается третья.
Код страны
Это компонент, который входит в цифровое значение при наборе международного формата. Когда гражданину нужно совершить исходящую связь другому абоненту, находящемуся за пределами российского пространства, потребуется ввести комбинацию цифр, соответствующую стране. В документации представлено сразу 9 зон, в которых присутствуют собственные цифровые значения. В частности:
В международном формате представлено немало комбинации цифр. При необходимости совершить звонок за пределы Российской Федерации можно воспользоваться справочником.
Код набора номера
Если с обычными телефонами все ясно, то с Айфоном возникают сложности. Для начала владельцу «яблока» необходимо набрать код выхода при размещении голосового вызова в иное государство. Такая комбинация известна как префикс международного формата, а иногда IDD. Фактически это прямое соединение со страной.
В качестве стандарта МСЭ рекомендует набирать два нуля. Этот стандарт внедрен многими странами, но далеко не всеми. К примеру, чтобы сделать соединению гражданину с Айфона в Канаду или Соединенные Штаты Америки, необходимо написать 011 для входа в систему. Такая система позволяет осуществить голосовую связь, даже если оба абонента находятся в разных государствах с разными номерами городов и префиксами.
То есть в Великобритании нужно при звонке набрать 00617, а в Соединенных Штатах Америки уже 011617.
Код соединительной линии
Иногда происходят сбои при голосовом звонке по номеру телефона по причине кода внешней линии.
Код соединительной линии – это последовательность цифр, которую необходимо набрать до международного номера для инициирования телефонного вызова с целью уточнения телекоммуникационного формата. Для этого и необходим знак «+» — чтобы сначала набирается международный код внешней линии, а затем уже идет комбинация государства.
Представленное понятие может быть как единой цифрой, так и цифровым кодом, который используется для размещения всех голосовых соединений в конкретном государстве. По факту сейчас не во всех странах используется данный формат. На практике номер записывается путем применения национальной цифровой комбинации, указанной в скобках.
То есть, например, если звонить в ту же Австралию, то формат звонка будет выглядеть следующим образом +61(0)7 и далее номер абонента.
Международный формат номеров мобильных телефонов в России
Российская нумерация в формате международного типа состоит сразу же из 3 составляющих. В частности:
То есть для набора по России достаточно набрать 11 цифр номера абонента, и это не считая +. Аналогичные показатели нужно ввести, если человек желает совершить с другого государства звонок в РФ. Внутри России можно или через восьмерку совершать звонки или же через +7. В контактной книге лучше сохранять номер сразу же в международном формате, так как некоторые звонки через 8 не проходят по сотовой вышке.
Сотовый оператор Мегафон в международном масштабе имеет комбинацию цифр 920, 929, 936 и 937. Если говорить о сотовом операторе МТС, то префикс 910, 919, 989 и 980. В Билайне прослеживается комбинация 903, 961, 909, 968, 976.
Стоит понимать, что сейчас по новой программе перехода номера человек может перейти на другого сотового оператора, сохранив свой номер телефона. Соответственно, узнать, кому принадлежит префикс, становится невозможным.
Формат + 7 Российская Федерация делит с Казахстаном и Абхазией. Другие же страны нашли другие префиксы и используют их. К примеру, в Республике Крым используется +7-869 (это для Севастополя), остальные же жители Крыма используют +7978.
Для звонков на номера любого сотового оператора, зарегистрированного в Российской Федерации, вне зависимости от расположения в домашнем регионе, нужно набрать формат 8 (код города) и восьмизначное значение или же +7 (код города) – это федеральное значение. Если нужно указать и добавочный номер, то нужно набрать изначально основной по вышеуказанной инструкции, дождаться ответа автоинформатора, а затем набрать дополнительный. Если телефон не поддерживает тональный режим, то сразу же после небольшой паузы введенного основного номера, прописывается символ Р, а далее уже дополнительную комбинацию.
Previous Entry | Next Entry
Правильное написание телефонных номеров. Взято с ebanners.ru
Как правильно писать номер телефона — формат телефонных номеров — номер телефона в международном формате
В каких странах и как именно принято писать телефонные номера
Особенности написания телефонных номеров — как принято писать телефонные номера, как правильно писать номера телефонов по международным стандартам.
Практически интернациональный формат телефонного номера не существует.
Формат номера телефона в USA — Как пишется номер телефона в Америке (США)
Все без исключения современные мобильные телефоны содержат полный латинский алфавит (а некоторые модели — русский). Тут возникает проблема с двумя способами использования букв. Первая модель — американская. Если вы едете по дороге и видите на большом грузовике надпись How am I driving? Call 1-800-EAT-SHIT, это значит, что вам предлагают позвонить по телефону 1-800-328-7448.
То есть американский формат записи XXX-XXXX
В Европе телефонные номера всегда отделялись блоками по две цифры.
Во Франции и в Великом Герцогстве Люксембург используют в качестве разделителя точки или пробелы (восьмизначные номера с кодом города):
В Германии используют пробелы (реже — дефисы):
00 49 (XX XX) XX XX XX
В Болгарии принято писать телефонные номера тремя группами по две цифры:
Особняком стоят Италия и Голландия, где очень часто можно встретить номера телефонов без каких-либо разделителей: XX XXXXXXX, 020-XXXXXXX — вопиющее надругательство над человеком, пытающимся такой номер не то что запомнить, а всего лишь прочитать. Особенно не хватает разделительного знака в записной книжке мобильного телефона — сходу разобрать десять слипшихся цифр нельзя.
В Великобритании (у которой в плане технических стандартов очень много общего с США) пишут номера телефонов двумя группами цифр:
0XXXX XXXXXX (кроме Лондона)
0800 XXXXXX (бесплатные номера)
Тут уместно напомнить, что в английском языке не принято большие числительные читать одним словом. Даже год при произношении разбивается на два отдельных числа: 1998 по-английски читается как «девятнадцать девяносто восемь», а не «одна тысяча девятьсот девяносто восемь». Иногда числа произносят по одной цифре.
В России (и в СССР) все телефонные номера записывались согласно правилу: дефисом или пробелом отделяются пары цифр справа налево. Если в начале остались три цифры, разрешается записать их слитно.
Пункт 3 правил, опубликованных в «Списке абонентов Московской телефонной сети» за 1916 год, гласит:
«Нумера свыше сотни произносятся так: напр. 1.23 — один двадцать три, 9.72 — девять семьдесят два, 70.09 — семьдесят нуль девять. Нумера свыше 10.000 — произносятся отдельно каждая цифра сотни, например 1.20.48 — один двадцать сорок восемь, 2.08.35 — два нуль восемь тридцать пять, 3.35.29 — три тридцать пять двадцать девять, 4.49.52 — четыре сорок девять пятьдесят два, 5.15.86 — пять пятнадцать восемьдесят шесть и т. д., а не сто двадцать сорок восемь, двести восемь тридцать пять и т. д.»
Эти правила написания номера телефона хорошо знают и военные связисты — при произношении двузначных чисел вероятность ошибки принимающей (слушающей) стороны снижается.
Формат записи телефонного номера для России, стран СНГ и Балтии такой: XXX-XX-XX. Многие бывшие советские республики переняли американский формат записи (XXX-XXXX), совершенно не учитывая культурных, исторических и семантических значений такого формата.
В телефонных справочниках дефисы могут заменяться на пробелы (для экономии времени наборщиков):
Кроме отдельных случаев с удачным сочетанием цифр (типа 222-3-222) сегодня в России телефон должен писаться так:
(правильное написание телефонного номера для обычных городских номеров)
(Как правильно писать телефонный номер для номеров с кодом города)
Например, как писать номер телефона в Москве: (095) 123-45-67
Федеральный формат номера сотового телефона:
(стандарт написания телефонного номера для номеров мобильных телефонов)
А вот телефонный номер России в международном формате:
(номер телефона в международном формате — правильное написание телефонного номера для обозначения российских номеров телефонов за рубежом)
приведены цитаты из http://www.artlebedev.ru/kovodstvo2/sections/91/
Profile
Latest Month
Октябрь 2008 | ||||||
Вс | Пн | Вт | Ср | Чт | Пт | Сб |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Метки
Page Summary
Категории
View my Categories page Разработано LiveJournal.com Designed by Terri McAllister Автор оригинала: David Yonge-Mallo, компания Google
Список составили разработчики Java, C++ и JavaScript библиотеки libphonenumber для парсинга, форматирования и проверки телефонных номеров Телефонные номера используются повсеместно и довольно давно. Поэтому очень удивительно, сколько заблуждений остаётся у программистов относительно них. 1. Телефонные номера, действительные сейчас, останутся действительными всегда. Телефонные номера определённого типа (например, мобильные), никогда не сменят тип. Подключенный сегодня телефонный номер завтра могут отключить. Бесплатный сегодня номер завтра может стать платным. Оператор связи может расширить диапазон доступных номеров, добавив дополнительную цифру и увеличив длину номера.Подсказка. Не сохраняйте свойства телефонного номера, такие как валидность или тип. Проверяйте эту информацию с помощью библиотеки, когда необходимо. 2. Телефонный номер однозначно идентифицирует человека. Ещё не так давно, когда мобильников не существовало, считалось вполне нормальным иметь один домашний телефон для всей семьи. В некоторых районах мира такое сохранилось до сих пор, когда родственники (или даже друзья) пользуются общим телефонным номером. 3. У человека есть только один телефонный номер. Очевидно, это не всегда так. 4. Телефонные номера не могут быть использованы заново. Старые номера заново вводят в оборот и раздают другим людям. 5. Каждый код страны соответствует в точности одной стране. У США, Канады и нескольких карибских островов одинаковый код +1. Россия и Казахстан делят код +7. И это не единственные примеры! 6. Каждой стране соответствует только один код. В данный момент (март 2016 года) на телефоны в спорной и не всеми признанной территории Косово можно дозвониться через национальные коды Сербии (+381), Словении (+386) или Монако (+377), смотря где и когда был выдан номер.Подсказка. Используйте телефонный виджет, чтобы подтолкнуть пользователей к вводу телефонного номера в международном формате. 7. Телефонный номер можно набрать отовсюду. Некоторые номера можно набрать только внутри страны. Некоторые набираются из определённой группы стран, например, как международные номера 00800. Некоторые набираются только если абонент обслуживается конкретным оператором связи. 8. Есть только два способа набрать номер: в международном формате или в местном. Для некоторых номеров требуются различные префиксы, в зависимости от того, откуда набирается номер; с какого устройства и на какое устройство вы звоните; находитесь ли вы внутри или за пределами определённого географического региона. Примеры:
Подсказка. Используйте formatForMobileDialling для получения конкретного номера, который пользователь должен набрать со своего мобильного телефона. 9. Чтобы сделать номер доступным для дозвона, достаточно сменить префикс. В Аргентине для внутренних звонков нужно вставить цифры «15» после кода региона, но перед местным номером, а цифру «9» после кода страны (54) нужно удалить. Так международный номер +54 9 2982 123456 превращается в местный номер 02982 15 123456. 10. Ни один префикс реального телефонного номера не может быть реальным телефонным номером. В некоторых странах возможно попасть на другого абонента, если набрать дополнительные цифры после телефонного номера. Так, номер 12345678 может принадлежать одному человеку, а номер 123456 — другому. 11. По неправильно набранному номеру невозможно дозвониться. В некоторых странах или на некоторых аппаратах лишние цифры отбрасываются. Например, 1-800-MICROSOFT — это неправильный номер, но он всё равно соединит с Microsoft, потому что лишние цифры отбрасываются. Также и на номера вроде 911 в некоторых странах можно позвонить, набрав 911123, но не во всех странах. В других странах оператор «исправляет» неправильный номер, например, добавляя мобильный код, если он знает, что это мобильный номер. 12. Все действующие телефонные номера соответствуют спецификациям ITU. Спецификации ITU содержат стандарты вроде такого: «Национальные номера не могут быть больше 16 разрядов», но в Германии раздавали действующие телефонные номера длиннее этого. 13. Все действующие телефонные номера принадлежат какой-либо стране. Есть много «национальных кодов», которые выдавали организациям без географической привязки, таким как «800» или спутниковые сервисы. 14. Телефонный номер содержит только цифры. В Израиле некоторые рекламные номера начинаются с «*». 15. Телефонные номера всегда написаны в ASCII. В Египте телефонные номера обычно записывают местными цифрами.См. такжеЗаблуждения программистов относительно времениЗаблуждения программистов об именах Возникла задача автоматического форматирования телефонных номеров в виде страна (город) номер, и первым делом я обратился к существующим решениям. К сожалению, оказалось, что все найденные решения основываются на обычном подгоне строки под пользовательский формат, имея ограниченную область применения и ошибки при выходе за ее пределы. Для начала приведу обзор найденных решений. Тем, кому это не интересно, рекомендую прокрутить ниже до заголовка «Форматы телефонных номеров» — там уже представлен мой вариант разбора номера с ссылкой на код.
Всеуничтожающий примитив
(Найденное решение. Мое ниже) Первое, на что я наткнулся — были сообщения на форумах и банки скриптов, предлагающие решения следующего плана:
Один из простых вариантов шустрого форматирования телефонных номеров, но каждое такое решение ориентировано на телефонные номера из конкретной локальной зоны и не является решением задачи.
Форматирование с помощью sscanf
(Найденное решение. Мое ниже)
Не смотря на простое решение, эта функция уже умеет форматировать номера длиной 7, 10 и более цифр, но попадись ей номер из российской глубинки, она подавится и выдаст ошибочный результат.
Symfony, lib/helpers/PhoneHelper.php, format_phone
(Найденное решение. Мое ниже)
Функция позволяет не только форматировать в XXX-XXXX, (XXX) XXX-XXXX и X (XXX) XXX-XXXX, но и конвертировать номера, написанные цифрами. Ограниченность функции в форматировании номеров длиной 7, 10 и 11 символов никак не подходит.
Форматы телефонных номеров
Из вики-статьи видно, что никакого простого и удобного паттерна для быстрого форматирования всех номеров не существует. Коды стран регистрируются, подобно доменным зонам, а коды городов — остаются на совести каждой из стран. Другими словами, маршрутизация звонков идет по маске, начиная с кода страны: звонок, направленный в конкретную страну далее пробивает себе маршрут в соответствии с кодами области, города, района и т.д. начиная с самой левой цифры, пока последнее звено не перебросит его на конкретный телефонный/факсовый аппарат. Проблема усложняется еще и тем, что коды городов внутри стран точно так же не поддаются единой сквозной стандартизации, т.е. в худшем из вариантов для правильного форматирования номеров придется использовать двумерный массив с кодами стран и их городов.На самом деле, все оказалось не так страшно. В каждой стране можно разделить все коды городов на две части: на те, что в большинстве своем совпадают по длине, и все остальные. Этого достаточно, чтобы резко сократить область перебора кодов при сравнении. Т.е. можно создать массив из данных по каждой стране вида:
Затем провести предварительную обработку данных, дополнив его полями, сужающими область перебора, exceptions_max и exceptions_min — максимальной и минимальной длиной кода городов-исключений, соответственно. Также необходимо учесть страны, в которых коды городов начинаются на 0 — отразим эту «особенность» полем zeroHack. Как пример:
После этого возьмем подходящие участки кода из решений выше и сделаем функцию форматирования:
Функция полностью решает поставленную задачу.Из недостатков функции следует отметить отсутствие анализа медленных участков с целью оптимизаци, а также обработки телефонных номеров, где есть код города, но нет кода страны (в этом случае достаточно бить на блоки функцией phoneBlocks или воспользоваться одним из решений выше). При использовании ее в какой-либо реализации необходимо заменить глобальную переменную на ссылку в параметре, а также можно доработать или заменить формат вывода, за который отвечает функция phoneBlocks.
Самое интересное
Используя информацию с сайтов:http://www.mtt.ru/info/def/index.wbphttp://www.hella.ru/code/codeuro.htmhttp://www.scross.ru/guide/phone-global/ я собрал массив данных по всем представленным странам, включая города-исключения, флаги zeroHack, а также коды мобильных сетей. Код можно загрузить здесь.
Быстродействие
Вопреки всем самым пессимистичным ожиданиям, код отрабатывает 10.000 номеров менее чем за 2 секунды.UPD Готовятся поправки: