Определение информации о номере телефона и переформатирование в PHP

Я ищу способ определить, находится ли номер телефона в международном формате или в местном формате, и если он в международном формате, к какой стране он принадлежит. Если он в местном формате, он должен запросить у пользователя код страны, а затем преобразовать его в международный формат.

Примеры:

  • 00447749123123 = международный номер Великобритании - переформатировать в 447749123123

  • +447749123123 = международный номер Великобритании - переформатировать в 447749123123

  • 447749123123 = международный номер Великобритании

  • 07749123123 = национальный номер Великобритании - подсказка для кода страны и переформатирования в 447749123123

  • 18775784000 = международный американский номер

  • 8775784000 = национальный американский номер - запросите код страны и переформатируйте в 18775784000

Кто-нибудь знает, существует ли такой скрипт, или, если нет, как это сделать? ИТ должны работать в максимально возможном количестве стран (не только в Великобритании и США).


person user467886    schedule 06.10.2010    source источник
comment
Невозможно определить, является ли номер национальным или британским. Однако другие переформатирования могут быть выполнены.   -  person halfdan    schedule 06.10.2010


Ответы (2)


Я не думаю, что такой скрипт или веб-сервис существует, я исследовал что-то подобное пару недель назад.

Поскольку в разных странах телефонные номера разной длины, я думаю, вам будет сложно создать сценарий, который будет работать для всех стран с разными способами написания телефонного номера.

Вы должны сделать предположения о номере телефона, указанном в качестве входных данных. По сути, у вас есть два разных подхода.

  1. Сделайте жесткое решение, которое работает только с известными форматами внутренних телефонных номеров.
  2. Сделайте гибкое решение, которое принимает только легко идентифицируемые международные форматы, но, как следствие, принимает любой внутренний формат.

Я бы остановился на варианте номер два.

В ваших примерах номера 1 и 2 легко идентифицировать как международные номера. Номер 3 сложно определить, так как это может быть международный номер Великобритании или неизвестной страны с 12-значными внутренними телефонными номерами.

Поэтому я бы начал с принятия вариантов один и два в качестве действительных международных номеров и пропустил бы номер три.

<?php
$number = "00447749123123"; // remember the quotes the number must 
                            // keep leading zeros.

if (preg_match('/^(00|\+)/', $number)) {
    echo "International number";
    // parse and recognize country code.
} else {
    echo "national number";
    // identify which country
}

Определить национальные телефонные номера, не зная заранее, какая это страна, невозможно, поскольку многие страны будут использовать одни и те же форматы. Поэтому, чтобы пользователи выбирали свою страну в веб-форме, необходимо добавить международный код к номерам.

person thomasmalt    schedule 06.10.2010

Нет ничего бесплатного, но Neustar будет вашим лучшим платным сервисом. Я думаю, что они также предлагают услуги международных номеров, но вам, возможно, придется закодировать свой собственный интерфейс API. Другим платным маршрутом может быть Twilio, но я не уверен в их международные варианты. Я знаю, что некоторые из крупных SMS-агрегаторов могут предлагать это для своих продуктов, но не в качестве отдельного API/сервиса. Если вы ищете платный вариант, вы можете попробовать OpenMarket (MxTelecom для международных). Просто мысль

person Phill Pafford    schedule 06.10.2010