Есть ли такая вещь, как номер телефона библиотеки моющего средства - PullRequest
8 голосов
/ 27 июня 2011

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

Это невсе так просто, как может показаться на первый взгляд.Веб-сайт позволяет людям по всему миру вводить свой номер любым удобным для них способом, поэтому многие люди вводят национальные номера (страна также указывается в другом поле).Некоторые люди вводят международный номер в «правильных» форматах (с «+»), некоторые вводят его немного менее правильно, используя международный префикс своей страны.

Я хотел бы сообщить библиотеке / инструменту страныс которого я звоню, и номер телефона в произвольном формате и, возможно, страну, которой это соответствует (так как это поможет сгенерировать международный код, если он не будет введен), и использовать известные шаблоны, чтобы лучше угадать номер, который будет работатьв моей стране вызова

Так, например, при звонке из США на номер в Великобритании:

+44 (0) 1225-344567 => 011441225344567

или при звонке из Великобритании на номер США:

(613) 4562342 => 0016134562342

Кто-нибудь знает какие-либо (в идеале .NET Framework-friendly) решения, которые позволят мне без сомнения заново изобретать колесо

Ответы [ 5 ]

7 голосов
/ 28 июня 2011

Я реализовал только это, Марк.Я работаю на оператора мобильной связи и имею международную заявку на отправку SMS.Я не знаю ни о каких сторонних библиотеках, которые реализуют эти правила.Как упомянуто выше, нельзя просто иметь дело со случайным вводом, поскольку форматы телефонных номеров различаются в разных странах.В некоторых странах, таких как Германия, есть коды городов и номера телефонов переменной длины.Если они не вставят туда код страны, вы провалились.Тем не менее, в моем случае я могу предположить, что если отсутствует код страны, это номер телефона США.Результаты моего фильтра оказались очень точными с пользователями и входными данными, которые у меня были.

Можно сделать некоторые предположения, и, зная целевую аудиторию, регистрируя входные данные и анализ, можно получитьнабранные вещи. Моя первая реализация была для веб-приложения "white label", которое используется для тестирования различными людьми по всему миру.Я быстро обнаружил, что большинство иностранных людей действуют вместе и привыкли к квази-стандартному формату.Обычно американцы вводят номера телефонов, которые наиболее запутаны.Европейцы очень привыкли к международному набору номера.

Первое правило - убрать все, кроме цифр и начального «+».

Если полученный номер содержит менее 8 цифр, это мусор, укажитеошибка пользователя.

Если результирующее число начинается с «+», предположите, что это стандартный формат, а следующие 2–6 цифр представляют «код страны».Выясните код страны, затем обработайте оставшиеся цифры в соответствии с правилами для этой страны.

Если номер начинается с 0, предположим, что кто-то вставил префикс международного доступа и убрал первые 0 и 1, затем:если оставшееся число составляет 10 цифр, предположим, что это был номер США, введенный американцем, и обработайте соответствующим образом.Если оставшееся число не 10 цифр, а не менее 8, предположим, что первые 2-6 цифр являются кодом страны, найдите код страны и выполните обработку в соответствии с правилами этой страны.

Если номер начинается сa 1, и это всего 11 цифр, предположим, что это номер США (или острова Карибского бассейна), и обработайте соответствующим образом.

ЕСЛИ число начинается с 1 и не равно 11 цифрам, уберите первые 1посмотрите, осталось ли по крайней мере 8 цифр, и предположим, что оставшиеся первые 2-6 цифр являются кодом страны и обрабатываются в соответствии с правилами страны.

Наконец, номер не начинается с +, 0 или1 и состоящий как минимум из 8 цифр, предположим, что он находится в стандартной записи без +, то есть кода страны в первую очередь, используйте первые 2–6 цифр в качестве кода страны и обрабатывайте его в соответствии с правилами этой страны.

Хитрость во всем этом заключается в том, чтобы иметь отображение всех кодов стран мира и информацию о плане нумерации для каждой страны.У меня есть эта карта и правила для многих стран.Если вам нужна эта информация, я с удовольствием поделюсь с вами кодом C #, который определяет, какая страна.Напишите мне.

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

2 голосов
/ 27 июля 2011

Да: общая библиотека Google Java, C ++ и Javascript для анализа, форматирования, хранения и проверки международных телефонных номеров теперь перенесена на C #:

https://github.com/erezak/libphonenumber-csharp

Удачи!

1 голос
/ 10 июля 2013

Библиотека библиотеки Google для анализа, форматирования, хранения и проверки международных телефонных номеров теперь перенесена на C #.

https://github.com/erezak/libphonenumber-csharp

0 голосов
/ 28 июня 2011

Существует «стандарт» для форматирования международных (и национальных) телефонных номеров.Они выглядят так: +31 42 123 4567 (+ номер префикса страны по телефону).Пример взят из Википедии .Хотя вы не должны ожидать, что кто-то войдет в это.По моему опыту пользователи, скорее всего, будут придерживаться формата, к которому они привыкли.

Я не знаю ни одной библиотеки, которая будет преобразовывать все (в основном локальные) представления в те, что были упомянуты мной или в любой другой формат.

0 голосов
/ 28 июня 2011

Нет, нет :) Существует очень мало правил, регулирующих телефонные номера между странами.В некоторых странах даже есть несколько представительств.

Например, в Великобритании имеются коды регионов переменного размера, например:

  • 0121 = Бирмингем
  • 01223 = Кембридж
...