La biblioteca Common Java, C ++ y JavaScript de Google para analizar, formatear y validar números de teléfono internacional. La versión Java está optimizada para ejecutar en teléfonos inteligentes, y es utilizada por el marco de Android desde 4.0 (Sandwich de helados).
README
s in directories relevant to the code you're interested in.getNumberType
- gets the type of the number based on the number itself; Capaz de distinguir la línea fija, móvil, gratis, tarifa premium, costo compartido, VoIP, números personales, uan, buscapersonas y correo de voz (siempre que sea factible).isNumberMatch
- gets a confidence level on whether two numbers could be the same.getExampleNumber
and getExampleNumberForType
- provide valid example numbers for all countries/regions, with the option of specifying which type of example phone number is needed.isPossibleNumber
- quickly guesses whether a number is a possible phone number by using only the length information, much faster than a full validation.isValidNumber
- full validation of a phone number for a region using length and prefix information.AsYouTypeFormatter
- formats phone numbers on-the-fly when users enter each digit.findNumbers
- finds numbers in text.PhoneNumberOfflineGeocoder
- provides geographical information related to a phone number.PhoneNumberToCarrierMapper
- provides carrier information related to a phone number.PhoneNumberToTimeZonesMapper
- provides timezone information related to a phone number.La demostración de Java se actualiza con un ligero retraso después de la versión de GitHub.
Última actualización de demostración: V8.13.50.
Nota: Aunque la biblioteca (rama principal/versión de Maven) está en V8.12.57, debido a algunos problemas de implementación, no pudimos actualizar la demostración de Java con la nueva versión binaria. Pronto solucionaremos esto. Mientras tanto, use JS Demo.
Si este número es más bajo que el número de versión de la última versión, estamos entre versiones y la demostración puede estar en cualquier versión.
Hay una aplicación de Android de demostración llamada Formatter E.164 en este repositorio. El propósito de esta aplicación es mostrar un ejemplo de cómo la biblioteca puede usarse en una situación de la vida real, en este caso específicamente en una aplicación de Android que usa Java.
The JavaScript demo may be run at various tags; this link will take you to master
.
Para incluir el código Java en su aplicación, integre con Maven (ver wiki) o descargue los últimos frascos del repositorio de Maven.
Javadoc se actualiza automáticamente para reflejar la última versión en https://javadoc.io/doc/com.googlecode.libphonenumber/libphonenumber/.
Generalmente elegimos el número de liberación siguiendo estas pautas.
Si alguno de los cambios impulsados a Master ya que la última versión es incompatible con la intención / especificación de una API de LibphonEnnumber existente o puede hacer que los clientes de LibphonEnumber (Java, C ++ o JS) tengan que cambiar su código, publicamos A A Publicing A Liberación principal. For example, if the last release were 7.7.3, the new one would be 8.0.0.
If any of those changes enable clients to update their code to take advantage of new functionality, and if clients would have to roll-back these changes in the event that the release was marked as "bad", we publish a minor release. For example, we'd go from 7.7.3 to 7.8.0.
De lo contrario, incluso cuando una versión contiene solo cambios de metadatos, publicamos una versión sub-minor, por ejemplo, 7.7.3 a 7.7.4.
Sometimes we make internal changes to the code or metadata that, while not affecting compatibility for clients, could affect compatibility for porters of the library. Para tales cambios, hacemos anuncios a libphonenumber-discuss. Tales cambios no se reflejan en el número de versión, y publicaríamos una versión de sub-minor si no hubiera otros cambios.
¿Quieres ser notificado de nuevos lanzamientos? Durante la mayor parte del año, a excepción de las vacaciones y las circunstancias atenuantes, lanzamos quincenalmente. Actualizamos etiquetas de lanzamiento y documentan notas detalladas de la versión. También enviamos un anuncio a LibphonEnumber-Discous para cada lanzamiento.
Supongamos que tiene una cadena que representa un número de teléfono de Suiza. This is how you parse/normalize it into a PhoneNumber
object:
String swissNumberStr = "044 668 18 00" ;
PhoneNumberUtil phoneUtil = PhoneNumberUtil . getInstance ();
try {
PhoneNumber swissNumberProto = phoneUtil . parse ( swissNumberStr , "CH" );
} catch ( NumberParseException e ) {
System . err . println ( "NumberParseException was thrown: " + e . toString ());
}
At this point, swissNumberProto
contains:
{
"country_code" : 41 ,
"national_number" : 446681800
}
PhoneNumber
is a class that was originally auto-generated from phonenumber.proto
with necessary modifications for efficiency. For details on the meaning of each field, refer to resources/phonenumber.proto
.
Ahora validemos si el número es válido:
boolean isValid = phoneUtil . isValidNumber ( swissNumberProto ); // returns true
Hay algunos formatos compatibles con el método de formato, como se ilustra a continuación:
// Produces "+41 44 668 18 00"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . INTERNATIONAL ));
// Produces "044 668 18 00"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . NATIONAL ));
// Produces "+41446681800"
System . out . println ( phoneUtil . format ( swissNumberProto , PhoneNumberFormat . E164 ));
También puede optar por formatear el número en la forma en que se marca desde otro país:
// Produces "011 41 44 668 1800", the number when it is dialed in the United States.
System . out . println ( phoneUtil . formatOutOfCountryCallingNumber ( swissNumberProto , "US" ));
PhoneNumberUtil phoneUtil = PhoneNumberUtil . getInstance ();
AsYouTypeFormatter formatter = phoneUtil . getAsYouTypeFormatter ( "US" );
System . out . println ( formatter . inputDigit ( '6' )); // Outputs "6"
... // Input more digits
System . out . println ( formatter . inputDigit ( '3' )); // Now outputs "650 253"
PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder . getInstance ();
// Outputs "Zurich"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . ENGLISH ));
// Outputs "Zürich"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . GERMAN ));
// Outputs "Zurigo"
System . out . println ( geocoder . getDescriptionForNumber ( swissNumberProto , Locale . ITALIAN ));
Advertencia: no proporcionamos datos sobre el operador actual de un número de teléfono, solo el operador original al que se le asigna el rango correspondiente. Lea sobre la portabilidad de los números.
PhoneNumber swissMobileNumber =
new PhoneNumber (). setCountryCode ( 41 ). setNationalNumber ( 798765432L );
PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper . getInstance ();
// Outputs "Swisscom"
System . out . println ( carrierMapper . getNameForNumber ( swissMobileNumber , Locale . ENGLISH ));
Se pueden encontrar más ejemplos sobre cómo usar la biblioteca en las pruebas unitarias.
Nos conocen varios puertos de terceros de la biblioteca de números de teléfono. Los compartimos aquí en caso de que sean útiles para los desarrolladores.
Sin embargo, enfatizamos que estos puertos son de desarrolladores fuera del proyecto LibphonEnumber. No evaluamos su calidad o influyimos en sus procesos de mantenimiento.
Alternativas a nuestras propias versiones:
Class#getResourcesAsStream
and asks that Android apps follow the Android loading best practices of repackaging the metadata and loading from AssetManager#open()
themselves (FAQ). If you don't want to do this, check out the port at https://github.com/MichaelRocks/libphonenumber-android, which does repackage the metadata and use AssetManager#open()
, and may be depended on without needing those Optimizaciones de carga específicas de los clientes. También debe consultar el puerto en https://github.com/lionscribe/libphonenumber-android que también admite la geocodificación, y solo requiere un cambio de código de línea.Herramientas basadas en metadatos de LibphonEnumber: