Extraer el código del país del número de móvil
Tengo una lista de números de móvil con código de país como "919638095998" número. Me he referido el libphonenumber google ejemplo también pero en que primero tenemos que pasar el país código de 2 dígitos, que no sé inicialmente. Entonces, ¿cómo puedo saber que el número es de qué país?
También he conseguido una solución como extraer manualmente el código uno por un dígito del número móvil y después comparar con el código del país. Pero es una tarea larga y también me dará un mal desempeño. ¿Alguien puede sugerir una solución adecuada?
- Alarma programada para repetir cada minuto del reloj android
- Android.support.v7.widget.CardView no se pudo encontrar (Vista previa de Android Studio 1.1)
- Mostrar el teclado automáticamente
- OAuth: App Id o redirect_uri no coincide con el código de autorización
- Problema de codificación de Android
- Referencia de método llama método incorrecto
- ¿Cómo comprobar si el valor ya existe en la base de datos android sqlite?
- Dónde colocar los archivos de texto en el directorio de Android
- Acercar a los marcadores google map V2
- FileNotFoundException (permiso denegado) al intentar escribir un archivo en sdcard en Android
- Android Material recolorado Subtexto de EditText
- Android: crea un servicio que se ejecuta una vez al día
- Android consigue el intento al implementar RecognitionListener
Hay una lista de todos los números de teléfono disponibles para los códigos de país en Wikipedia. Es aquí
http://en.wikipedia.org/wiki/List_of_country_calling_codes
Me gustaría crear dos hashmaps. Uno con todos los códigos de cuatro dígitos y otro que contiene los dos y tres dígitos.
Hashmap fourdigitcodes; //check if first digit is 7 if(firstdigit==7) //country definitely russia else if country code begins with 1. Check the first four digits are in the hashmap with four digit codes and return the value if no value is found then answer is certainly usa. otherwise String country=""; HashMap<String,String> ccode = new HashMap<String,String>(); ccode.put("353","Ireland");//List all country codes ccode.put("49","Germany"); String value = ccode.get("49");//See if I have a value for the first 2 digits if(value != null){ country = value; //If I found a country for the first two digits we are done as the first two digits of the country code consisting of two digits cannot be in a country code with 3 }else{ the country is certainly 3 digit. return the first three digits by entering the first 3 digits as the key of the hashmap countaining the first three digits. }
En resumen. Si el primer dígito es 7 ruso. Si es 1 compruebe en el hashmap de cuatro códigos del dígito para los primeros cuatro números si encuentra un código de cuatro dígitos devuelva el país correspondiente. Si no la respuesta es los EEUU compruebe de otra manera dos primeros dígitos en el hashmap que contiene los 2 o 3 dígitos. Si se encuentra dos, entonces devolver la respuesta de otro es sin duda un código de tres dígitos y devolver el país correspondiente de la hash.
Será tedioso hacer el hashmap pero creo que es una solución eficiente.
Si no es tarde
Solo buscando esto encontré una biblioteca de Java y Javascript mantenida por Google;)
Consulte el repo: https://github.com/googlei18n/libphonenumber
También hay una demo.
¡Buena suerte!
Si bien el uso de estructuras estáticas de datos puede considerarse una mala práctica, los códigos de país no cambian mucho, por lo que creo que la creación de una lista de ellos como un árbol y analizar el número con este árbol debería ser una solución fácil de implementar.
También puede poner la lista de códigos de país en un archivo externo para que pueda actualizarse fácilmente sin cambiar el código de la aplicación.
Wikipedia tiene la lista de códigos de país aquí .
Si el código de país es sólo 2 dígitos no. Divida el número de teléfono en 2 con la primera subcadena con 2 dígitos y la segunda con los 10 dígitos restantes.
Si echa un vistazo a su propio enlace, puede encontrar la clase CountryCodeToRegionCodeMap . Contiene una lista de probablemente todos los códigos de país. Usted podría utilizar que para crear su propio código para determinar el código del país tiene una longitud de 1, 2 o 3. No puedo creer que este es el único lugar en Internet donde se puede encontrar una lista de este tipo.
Apenas haciendo una comprobación rápida de wikipedia , pensé que usted necesita hacer un algo de la búsqueda de la cadena del máximo de la parte delantera. En un conflicto, que no parece venir, pero incase, puede comprobar el número de dígitos (NSN) para encontrar el código del país
Una manera optimizada sería crear cubos. A partir de la lista de códigos de país . La longitud máxima del código de país es 4, (a menos que desee entrar en la precisión de las provincias en cuyo caso será 7, marque la zona 6). Y luego comprobar la existencia de 4, 3, 2, 1. Esto reducirá significativamente su tiempo de algoritmo de búsqueda. Pero sí el tamaño de los datos será mayor. Un caso clásico de intercambio de espacio de tiempo
Código de país en el móvil algún tiempo empezar con como + (más) 44, 0044, 44 y como se ha dicho anteriormente algunos países pueden tener código de longitud variable. Así que la mejor solución posible sería comenzar desde atrás, a partir de ahora sabemos longitud de número de móvil es de 10. una vez que tome los 10 dígitos, entonces se puede analizar código de país en consecuencia.
Libphonenumber hace eso por ti. Todo lo que tienes que hacer es añadir el signo +
antes de tu número de teléfono y omitir el código del país al analizar el número de teléfono.
String numberStr = "+919638095998"; PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); try { Phonenumber.PhoneNumber numberProto = phoneUtil.parse(numberStr, ""); System.out.println("Country code: " + numberProto.getCountryCode()); //This prints "Country code: 91" } catch (NumberParseException e) { System.err.println("NumberParseException was thrown: " + e.toString()); }