Menggunakan libphonenumber untuk mengesahkan Nombor Telefon

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan melihat bagaimana menggunakan libphonenumber perpustakaan sumber terbuka Google untuk mengesahkan nombor telefon di Java .

2. Ketergantungan Maven

Pertama, kita perlu menambahkan kebergantungan untuk perpustakaan ini di pom.xml kami :

 com.googlecode.libphonenumber libphonenumber 8.12.10 

Maklumat versi terkini boleh didapati di Maven Central.

Sekarang, kami sudah bersedia untuk menggunakan semua fungsi yang ditawarkan oleh perpustakaan ini.

3. Nombor TelefonUtil

Perpustakaan menyediakan kelas utiliti, PhoneNumberUtil , yang menyediakan beberapa kaedah untuk bermain-main dengan nombor telefon.

Mari kita lihat beberapa contoh bagaimana kita boleh menggunakan pelbagai API untuk pengesahan.

Yang penting, dalam semua contoh, kami akan menggunakan objek tunggal kelas ini untuk membuat panggilan kaedah :

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();

3.1. isPossibleNumber

Dengan menggunakan P honeNumberUtil # isPossibleNumber , kita dapat memeriksa apakah nombor tertentu mungkin untuk kod negara atau wilayah tertentu.

Sebagai contoh, mari kita lihat Amerika Syarikat, yang mempunyai kod negara 1. Kita dapat memeriksa sama ada nombor telefon yang diberikan mungkin nombor AS dengan cara ini:

@Test public void givenPhoneNumber_whenPossible_thenValid() { PhoneNumber number = new PhoneNumber(); number.setCountryCode(1).setNationalNumber(123000L); assertFalse(phoneNumberUtil.isPossibleNumber(number)); assertFalse(phoneNumberUtil.isPossibleNumber("+1 343 253 00000", "US")); assertFalse(phoneNumberUtil.isPossibleNumber("(343) 253-00000", "US")); assertFalse(phoneNumberUtil.isPossibleNumber("dial p for pizza", "US")); assertFalse(phoneNumberUtil.isPossibleNumber("123-000", "US")); }

Di sini, kami menggunakan varian lain dari fungsi ini juga dengan melewati wilayah yang kami harapkan nombornya akan dipanggil sebagai String .

3.2. isPossibleNumberForType

Perpustakaan mengenali pelbagai jenis nombor telefon, seperti talian tetap, mudah alih, bebas tol, mel suara, VoIP, pager, dan banyak lagi.

Kaedah kegunaannya adalahPossibleNumberForType memeriksa apakah nombor yang diberikan adalah mungkin untuk jenis tertentu di kawasan tertentu.

Sebagai contoh, mari kita pergi ke Argentina kerana ia memungkinkan kemungkinan panjang nombor untuk pelbagai jenis.

Oleh itu, kita dapat menggunakannya untuk menunjukkan kemampuan API ini:

@Test public void givenPhoneNumber_whenPossibleForType_thenValid() { PhoneNumber number = new PhoneNumber(); number.setCountryCode(54); number.setNationalNumber(123456); assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE)); assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE)); number.setNationalNumber(12345678901L); assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE)); assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.MOBILE)); assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE)); }

Seperti yang dapat kita lihat, kod di atas mengesahkan bahawa Argentina membenarkan nombor talian tetap 6 digit dan nombor telefon bimbit 11 digit.

3.3. isAlphaNumber

Kaedah ini digunakan untuk mengesahkan sama ada nombor telefon yang diberikan adalah angka alfanumerik yang sah, seperti 325-CARS :

@Test public void givenPhoneNumber_whenAlphaNumber_thenValid() { assertTrue(phoneNumberUtil.isAlphaNumber("325-CARS")); assertTrue(phoneNumberUtil.isAlphaNumber("0800 REPAIR")); assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE")); assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE..")); assertFalse(phoneNumberUtil.isAlphaNumber("+876 1234-1234")); }

Untuk menjelaskan, nombor alpha yang sah mengandungi sekurang-kurangnya tiga digit pada awalnya, diikuti oleh tiga atau lebih huruf abjad. Kaedah utiliti di atas terlebih dahulu menghilangkan input yang diberikan dari sebarang pemformatan dan kemudian memeriksa keadaan ini.

3.4. isValidNumber

API sebelumnya yang kita bincangkan dengan cepat memeriksa nombor telefon berdasarkan panjangnya sahaja. Sebaliknya, isValidNumber melakukan pengesahan lengkap menggunakan awalan serta maklumat panjang :

@Test public void givenPhoneNumber_whenValid_thenOK() throws Exception { PhoneNumber phone = phoneNumberUtil.parse("+911234567890", CountryCodeSource.UNSPECIFIED.name()); assertTrue(phoneNumberUtil.isValidNumber(phone)); assertTrue(phoneNumberUtil.isValidNumberForRegion(phone, "IN")); assertFalse(phoneNumberUtil.isValidNumberForRegion(phone, "US")); assertTrue(phoneNumberUtil.isValidNumber(phoneNumberUtil.getExampleNumber("IN"))); }

Di sini, nombor tersebut disahkan ketika kami tidak menentukan wilayah, dan juga ketika kami menentukannya.

3.5. isNumberGeografik

Kaedah ini memeriksa sama ada nombor tertentu mempunyai geografi atau wilayah yang berkaitan dengannya:

@Test public void givenPhoneNumber_whenNumberGeographical_thenValid() throws NumberParseException { PhoneNumber phone = phoneNumberUtil.parse("+911234567890", "IN"); assertTrue(phoneNumberUtil.isNumberGeographical(phone)); phone = new PhoneNumber().setCountryCode(1).setNationalNumber(2530000L); assertFalse(phoneNumberUtil.isNumberGeographical(phone)); phone = new PhoneNumber().setCountryCode(800).setNationalNumber(12345678L); assertFalse(phoneNumberUtil.isNumberGeographical(phone)); }

Di sini, dalam penegasan pertama di atas, kami memberikan nombor telefon dalam format antarabangsa dengan kod wilayah, dan kaedahnya benar. Tegasan kedua menggunakan nombor tempatan dari Amerika Syarikat, dan yang ketiga nombor bebas tol. Oleh itu API kembali palsu untuk kedua-dua ini.

4. Kesimpulan

Dalam tutorial ini, kami melihat beberapa fungsi yang ditawarkan oleh libphonenumber untuk memformat dan mengesahkan nombor telefon menggunakan contoh kod.

Ini adalah perpustakaan kaya yang menawarkan lebih banyak fungsi utiliti dan mengurus sebahagian besar keperluan aplikasi kami untuk memformat, menghuraikan, dan mengesahkan nombor telefon.

Seperti biasa, kod sumber tersedia di GitHub.