Я реализовал именно это, Марк. Я работаю в операторе беспроводной связи, и у меня есть международное приложение для отправки SMS. Мне неизвестны какие-либо сторонние библиотеки, реализующие эти правила. Как упоминалось выше, нельзя просто иметь дело со случайным вводом, поскольку форматы телефонных номеров различаются в зависимости от страны. В некоторых странах, таких как Германия, коды городов и телефонные номера имеют переменную длину. Если они не вставят код страны, вам конец. Однако в моем случае я могу предположить, что если в нем отсутствует код страны, это номер телефона в США. Результаты моего фильтра оказались очень точными с пользователями и входными данными, которые у меня были.
Можно сделать некоторые предположения, и, зная целевую аудиторию, регистрируя входные данные и анализируя, можно получить информацию. Моя первая реализация была для веб-приложения с «белой меткой», которое используется для тестирования разными людьми по всему миру. . Я быстро обнаружил, что большинство иностранцев действуют сообща и привыкли к квазистандартному формату +. Обычно больше всего запутываются американцы, вводящие телефонные номера. Европейцы очень привыкли к международному набору номера.
Первое правило — удалить все, кроме цифр и ведущего «+».
Если в полученном числе меньше 8 цифр, это мусор, укажите ошибку пользователя.
Если полученный номер начинается с «+», предполагается, что это стандартный формат и что следующие 2–6 цифр представляют «код страны». Выясните код страны, затем обработайте оставшиеся цифры в соответствии с правилами для этой страны.
Если номер начинается с 0, предположим, что кто-то ввел префикс международного доступа и удалил начальные 0 и 1, тогда: если оставшееся число состоит из 10 цифр, предположим, что это был номер США, введенный американцем, и обработайте его соответствующим образом. Если оставшееся число не 10 цифр, а не менее 8, предположите, что первые 2-6 цифр являются кодом страны, найдите код страны и обработайте в соответствии с правилами этой страны.
Если номер начинается с 1 и состоит из 11 цифр, предположите, что это номер США (или острова Карибского моря), и обработайте его соответствующим образом.
ЕСЛИ номер начинается с 1 и не состоит всего из 11 цифр, удалите начальные единицы, проверьте, осталось ли не менее 8 цифр, и предположите, что оставшиеся начальные цифры от 2 до 6 являются кодом страны и обрабатываются в соответствии с правилами страны.
Наконец, если номер не начинается с +, 0 или 1 и содержит не менее 8 цифр, предположим, что это стандартная запись без +, то есть сначала код страны, используйте первые 2–6 цифр в качестве кода страны. и обрабатывать в соответствии с правилами этой страны.
Хитрость во всем этом заключается в том, чтобы иметь отображение всех кодов стран мира и информацию о плане нумерации для каждой страны. У меня есть эта карта и правила для многих стран. Если вам нужна эта информация, я буду рад поделиться ею вместе с некоторым кодом C#, который определяет, какая страна. Сообщи мне.
Огромным подспорьем в этом является отправка пользователю названия страны, которую ваша программа угадывает. Они быстро поймут, если они попытаются ввести номер телефона в Германии, а ваше программное обеспечение спросит их, пытаются ли они набрать Гуам!
person
Christo
schedule
28.06.2011