web-dev-qa-db-fra.com

Extraire le code pays du numéro de téléphone [libphonen number]

J'ai une chaîne comme celle-ci: +33123456789 (numéro de téléphone français). Je souhaite extraire le code de pays (+33) sans connaître le pays. Par exemple, cela devrait fonctionner si j'ai un autre téléphone d'un autre pays. J'utilise la bibliothèque Google https://code.google.com/p/libphonenumber/ .

Si je connais le pays, c'est cool je peux trouver le code du pays:

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

mais je ne trouve pas moyen d'analyser une chaîne sans connaître le pays.

69
mrroboaat

D'accord, j'ai donc rejoint le groupe google de libphonenumber ( https://groups.google.com/forum/?hl=fr&fromgroups#!forum/libphonenumber-discuss ) et j'ai demandé à un question.

Je n'ai pas besoin de définir le pays en paramètre si mon numéro de téléphone commence par "+". Voici un exemple :

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());
}
113
mrroboaat

Ici, vous pouvez enregistrer le numéro de téléphone au format international.

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

il renvoie le numéro de téléphone au format international +94 71 560 4888

alors maintenant j'ai obtenir le code de pays comme cela

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

J'espère que ceci vous aidera

1

Un de nos clients avait un problème similaire et tous leurs numéros de téléphone ne commençaient pas par "+". Mais il est encore souvent possible de deviner le pays, en fonction du formatage du numéro de téléphone ... par exemple, 06 XX XX XX XX ressemble à un numéro de téléphone mobile français. Cela pourrait être autre chose, mais cela fonctionne en essayant de valider un numéro français et de voir si libphonenumber pourrait vérifier positivement.

De plus, ce client utilisait le nom probable du contact du pays d'origine pour tenter de déterminer quel pays valider. Par exemple, avec un nom italien, ils essaieraient de valider un numéro de téléphone italien.

Nous avons ajouté cette détection de code de pays à libphonenumber et créé une API gratuite combinant le nom personnel, ainsi que le formatage du numéro de téléphone (préfixe, combien de chiffres, combien d'espaces, s'il y a un tiret ou une parenthèse, etc.)

Il peut être essayé en ligne ici https://apiphonenumber.com/

Cela fonctionnera avec les nombres commençant par "+", mais 95% du temps, il fonctionnera également avec d'autres numéros formatés localement.

0
Elian Carsenat

J'ai gardé une méthode d'assistance pratique pour m'en occuper sur la base d'une réponse postée ci-dessus:

Importations:

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

Une fonction:

    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) {
            ""
        }
    }
0
Ali Nawaz