Подтвердить что ты не робот

Извлечение страны кода из номера телефона [libphonenumber]

У меня есть строка вроде этого: +33123456789 (французский номер телефона). Я хочу извлечь код страны (+33), не зная страны. Например, он должен работать, если у меня есть другой телефон из другой страны. Я использую библиотеку google https://code.google.com/p/libphonenumber/.

Если я знаю страну, это круто, я могу найти код страны:

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
int countryCode = phoneUtil.getCountryCodeForRegion(locale.getCountry());

но я не нашел способ разобрать строку, не узнав страну.

4b9b3361

Ответ 1

Хорошо, поэтому я присоединился к группе google libphonenumber (https://groups.google.com/forum/?hl=en&fromgroups#!forum/libphonenumber-discuss), и я задал вопрос.

Мне не нужно указывать страну в параметре, если мой номер телефона начинается с "+". Вот пример:

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
    // phone must begin with '+'
    PhoneNumber numberProto = phoneUtil.parse(phone, "");
    int countryCode = numberProto.getCountryCode();
} catch (NumberParseException e) {
    System.err.println("NumberParseException was thrown: " + e.toString());
}

Ответ 2

Здесь вы можете сохранить номер телефона в международном формате

internationalFormatPhoneNumber = phoneUtil.format(givenPhoneNumber, PhoneNumberFormat.INTERNATIONAL);

он возвращает номер телефона как Международный формат +94 71 560 4888

так что теперь у меня есть код страны, как этот

String countryCode = internationalFormatPhoneNumber.substring(0,internationalFormatPhoneNumber.indexOf('')).replace('+', ' ').trim();

Надеюсь, это поможет вам

Ответ 3

У одного из наших клиентов была похожая проблема, и не все их номера телефонов начинались с "+". Но все еще часто можно угадать страну, основываясь на форматировании номера телефона... например, 06 XX XX XX XX выглядит как французский номер мобильного телефона. Это может быть что-то еще, но это работает, пытаясь проверить по французскому номеру и посмотреть, может ли libphonenumber проверить положительно.

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

Мы добавили обнаружение кода страны в libphonenumber и создали бесплатный API, объединяющий личное имя, а также форматирование номера телефона (префикс, сколько цифр, сколько пробелов, если есть тире или скобки и т.д.)

Это можно попробовать онлайн здесь https://apiphonenumber.com/

Он будет работать с числами, начинающимися с "+", но в 95% случаев он будет работать и с другими локально отформатированными номерами.

Ответ 4

У меня есть удобный вспомогательный метод, чтобы позаботиться об этом, основываясь на одном ответе, опубликованном выше:

Импорт:

import com.google.i18n.phonenumbers.NumberParseException
import com.google.i18n.phonenumbers.PhoneNumberUtil

Функция:

    fun parseCountryCode( phoneNumberStr: String?): String {
        val phoneUtil = PhoneNumberUtil.getInstance()
        return try {
            // phone must begin with '+'
            val numberProto = phoneUtil.parse(phoneNumberStr, "")
            numberProto.countryCode.toString()
        } catch (e: NumberParseException) {
            ""
        }
    }

Ответ 5

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

Ответ 6

Вот ответ, как найти код вызова страны без использования сторонних библиотек (как это делает настоящий разработчик):

Получить список всех доступных кодов стран, Wikipedia может помочь здесь: https://en.wikipedia.org/wiki/List_of_country_calling_codes

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

Поверните свою цифру дерева цифрой до тех пор, пока вы не перейдете к последней ветке - это код вашей страны.