A Biblioteca Java, C ++ e JavaScript do Google para análise, formatação e validação de números de telefone internacionais. A versão Java é otimizada para executar em smartphones e é usada pela estrutura do Android desde 4.0 (sanduíche de sorvete).
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 taxa de linha fixa, móvel, gratuita, gratuita, custo compartilhado, VoIP, números pessoais, UAN, pager e correio de voz (sempre que viável).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.A demonstração Java é atualizada com um pequeno atraso após a liberação do GitHub.
Última atualização de demonstração: v8.13.50.
NOTA: Embora a biblioteca (release principal da filial/Maven) esteja em v8.12.57, devido a alguns problemas de implantação, não conseguimos atualizar a demonstração Java com a nova versão binária. Em breve iremos consertar isso. Enquanto isso, use a demonstração JS.
Se esse número for menor que o número da versão mais recente da versão, estamos entre as versões e a demonstração poderá estar em qualquer uma das versões.
Existe um aplicativo de demonstração Android chamado E.164 Formatter neste repositório. O objetivo deste aplicativo é mostrar um exemplo de como a biblioteca pode ser usada em uma situação da vida real, neste caso especificamente em um aplicativo Android usando Java.
A demonstração JavaScript pode ser executada em várias tags; this link will take you to master
.
Para incluir o código Java em seu aplicativo, integra -se ao Maven (consulte Wiki) ou faça o download dos frascos mais recentes do repositório Maven.
O JAVADOC é atualizado automaticamente para refletir a versão mais recente em https://javadoc.io/doc/com.googlecode.libphonenumber/libphonenumber/.
Geralmente escolhemos o número de lançamento seguindo essas diretrizes.
Se alguma das alterações pressionadas ao Mestre, pois a última liberação for incompatível com a intenção / especificação de uma API LibPhoneNumber existente ou pode causar clientes libphoneNumber (Java, C ++ ou JS) para alterar seu código para continuar construindo, publicamos um grande lançamento. Por exemplo, se a última versão fosse 7.7.3, a nova seria 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. Por exemplo, iríamos de 7.7.3 a 7.8.0.
Caso contrário, incluindo quando uma versão contém apenas alterações de metadados, publicamos uma liberação sub-minor, por exemplo, 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 essas mudanças, fazemos anúncios para LibphoneNumber-Discuss. Tais alterações não se refletem no número da versão e publicaríamos uma versão sub-minor se não houvesse outras alterações.
Quer ser notificado de novos lançamentos? Durante a maior parte do ano, exceto férias e circunstâncias atenuantes, lançamos quinzenalmente. Atualizamos as tags de lançamento e documentamos notas de versão detalhadas. Também enviamos um anúncio para LibphoneNumber-Discuss para cada lançamento.
Digamos que você tenha uma string representando um número de telefone da Suíça. 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
.
Agora vamos validar se o número é válido:
boolean isValid = phoneUtil . isValidNumber ( swissNumberProto ); // returns true
Existem alguns formatos suportados pelo método de formatação, conforme ilustrado abaixo:
// 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 ));
Você também pode optar por formatar o número da maneira como ele é discado de outro 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 ));
Advertência: não fornecemos dados sobre a transportadora atual de um número de telefone, apenas a operadora original que recebe o intervalo correspondente. Leia sobre portabilidade do número.
PhoneNumber swissMobileNumber =
new PhoneNumber (). setCountryCode ( 41 ). setNationalNumber ( 798765432L );
PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper . getInstance ();
// Outputs "Swisscom"
System . out . println ( carrierMapper . getNameForNumber ( swissMobileNumber , Locale . ENGLISH ));
Mais exemplos sobre como usar a biblioteca podem ser encontrados nos testes de unidade.
Several third-party ports of the phone number library are known to us. We share them here in case they're useful for developers.
However, we emphasize that these ports are by developers outside the libphonenumber project. Não avaliamos sua qualidade ou influenciamos seus processos de manutenção.
Alternatives to our own versions:
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 specific loading optimizations from clients. Você também deve conferir a porta em https://github.com/lionscribe/libphoneNumber-android, que também suporta geocodificação e requer apenas uma alteração de código de linha.Ferramentas baseadas em metadados libphoneNumber: