Как сопоставить номера телефонов из списка контактов пользователя, если номера в другом формате?

#android #ios #match

#Android #iOS #сопоставление

Вопрос:

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

  1. Пользователь регистрируется в моем приложении со своим номером телефона (как и любой другой пользователь)
  2. Приложение запрашивает разрешение контакта
  3. Приложение отправляет контакты (номера телефонов) на сервер для сопоставления с другими зарегистрированными номерами

Проблема, с которой я сталкиваюсь, заключается в том, что пользователи регистрируют свой номер телефона в формате: 1XXXYYY. Например, человек А регистрируется с номером 1222333. Может случиться так, что у человека B в списке контактов есть человек A как 0222333, как мне сопоставить этот номер? Я не могу знать, является ли префикс » 1″ или каким-либо другим номером.

Ответ №1:

Я хотел бы порекомендовать библиотеку libphonenumber: https://github.com/google/libphonenumber Он может анализировать числа, а затем выводить их в стандартизированный формат. Официальная библиотека поддерживает Java, C и JavaScript, но есть также порты на другие языки (см. Внизу страницы Github)

Вот краткий пример того, как отформатировать национальный номер как международный в Java

 public static String getInternationalNumber(String localNumber, String regionCode) {
    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
    Phonenumber.PhoneNumber phoneNumber;
    try {
        phoneNumber = phoneUtil.parse(localNumber, regionCode);
    }
    catch (NumberParseException e) {
        return null;
    }

    return (phoneUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
}
 

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

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

 public static String getRegionCode(String phone) {
    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
    Phonenumber.PhoneNumber phoneNumber;
    try {
        phoneNumber = phoneUtil.parse(phone, "");
    }
    catch (NumberParseException e) {
        return null;
    }
    return phoneUtil.getRegionCodeForNumber(phoneNumber);
}
 

Комментарии:

1. «Вероятно, можно предположить, что номера в списке контактов пользователя имеют тот же код страны, что и у пользователя». Я думал об этом, вероятно, это так. Я могу на это положиться. Кстати, хорошая библиотека: D