2013-07-11 4 views
9

Я получаю телефонные номера с мобильного устройства, формат варьируется от международного формата или нет.Сравнение «мобильных номеров» - и/или международного формата

Сценарий (ZA форматирует только для примера):

Зарегистрированные номера в базе данных всегда в международном формате: +27827177982

Числа я получаю может изменяться, например, +27827177982 = 27827177982 = 0827177982 - международный префикс для номера является +27

Как сопоставить его международный формат, даже если я не получаю международный формат ???


Имейте в виду:

Я не могу сделать преобразование только для 1 региона.

Есть ли простой способ сравнения номеров мобильных телефонов для всех регионов?

Приставки диапазоны в количестве символов ссылка: http://en.wikipedia.org/wiki/List_of_country_calling_codes


Мои идеи:

  • Сравни последние 9 знаков номера, это позволит исключить префикс региона .. но в каждом регионе есть только «9 символов, исключая префикс»?

  • Проникните через базу данных, сравнивая номера телефонов пару раз, например. проверить последние 9 цифр - если совпадение - проверьте на последние 10 и т.д. (но может вызвать нежелательные матчи)


Любая помощь будет в значительной степени быть оценены

+0

Зная страну происхождения, по крайней мере, один телефонный номер (при условии, что вы всегда сравнивая два), очень полезно здесь ... Тогда вы можете построить прочный алгоритм ... Я сделал это несколько раз, дайте мне знать, если вы все еще хотите помочь :) – Grantly

ответ

8

Вы можете посмотреть в использование библиотеки для этого. Например, библиотека libphonenumber Google с C# port being here. В частности, эти два метода могут быть стоит посмотреть в (курсив мой)

isNumberMatch - получает уровень доверия о том, может ли два числа быть одинаковыми.

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

+0

Выглядит очень многообещающе! Благодаря! Я дам вам шанс и дам вам знать. –

+0

Рад, что я мог бы помочь :) – keyboardP

0

В большинстве стран (США является заметным исключением), немеждународные номера начинаются с 0, так что решение будет что-то вроде:

  • Если страна находится в списке исключений , занимайтесь им специально.
  • иначе
    • Если первый символ 0, удалить его и добавить международный код страны
    • Убедитесь, первый символ является +.

Существует не простой ответ на это, потому что не существует международно установленных правил не хау телефонные номера работы.

0

Как насчет этого. Это списывается в верхней части моей головы:

string sourcePhoneNumber = "...."; 
string phoneNumber = "...."; 

int baseRegionCountryCode = 44; 

if (phoneNumber.StartsWith("0") && !phoneNumber.StartsWith("00")) 
{ 
    phoneNumber = phoneNumber.SubString(0, 1); 
    phoneNumber = String.Format("{0}{1}", baseRegionCountryCode, phoneNumber); 
} 
else if (phoneNumber.StartsWith("+")) 
{ 
    phoneNumber = phoneNumber.Replace("+", "00"); 
} 

if (sourcePhoneNumber == phoneNumber) 
{ 
    // do something awesome.... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^