[C#] 使用 libphonenumber-csharp 判斷電話正確,檢查是不是手機或是室內電話

2022-09-28


介紹一個之前用到的套件,因為工作問題,要處理很多不同國家的電話號碼

主要是東南亞,中國,還有台灣的電話號碼,光是東南亞就十個國家,我哪會知道每個國家(區域)的電話號碼是不是對的

所以今天來介紹一個 Google 開發的套件 libphonenumber,然後有開源大大把他轉成 C# 的套件



1. 使用 nuget 下載套件關鍵字 libphonenumber-csharp 然後安裝,基本上 porting 的套件不少

我的選擇原則就是最多人用,且支持 .NET 6 的,基本上我覺得其他用起來應該差異不大



2. 接下來就是判斷的部分這邊我放一些案例,主要會寫這一篇是因為,對方有可能會給一個

市內電話,他的確是那個國家的"合理"電話號碼,但是不是手機號碼

這樣我就不能夠寄送簡訊,所以我必須要判斷他是不是手機號碼

這邊我還多測試一些東西,你就看看是不是你要的,這邊我用瞎掰的一個手機電話,還有南投縣政府的市內電話來測試

var phoneNumberUtil = PhoneNumbers.PhoneNumberUtil.GetInstance(); //台灣電話號碼 var resultTaiwanNum1 = phoneNumberUtil.Parse("+886912345678", null); //true var resultTaiwanNum2 = phoneNumberUtil.Parse("+8860912345678", null); //true //瞎掰的電話 var resultTaiwanNum3 = phoneNumberUtil.Parse("+886712345678", null); //false //新北市政府電話 var resultTaiwanNum4 = phoneNumberUtil.Parse("+88602 2960 3456", null); //true //南投縣政府電話 var resultTaiwanNum5 = phoneNumberUtil.Parse("+88604 9222 2106", null); //true Console.WriteLine("Is Mobile:" + (phoneNumberUtil.GetNumberType(resultTaiwanNum2) == PhoneNumbers.PhoneNumberType.MOBILE).ToString()); Console.WriteLine("INTERNATIONAL:" + phoneNumberUtil.Format(resultTaiwanNum2, PhoneNumbers.PhoneNumberFormat.INTERNATIONAL)); Console.WriteLine("NATIONAL:" + phoneNumberUtil.Format(resultTaiwanNum2, PhoneNumbers.PhoneNumberFormat.NATIONAL)); Console.WriteLine("E164:" + phoneNumberUtil.Format(resultTaiwanNum2, PhoneNumbers.PhoneNumberFormat.E164)); Console.WriteLine("RFC3966:" + phoneNumberUtil.Format(resultTaiwanNum2, PhoneNumbers.PhoneNumberFormat.RFC3966)); //Is Mobile:True //INTERNATIONAL:+886 912 345 678 //NATIONAL:0912 345 678 //E164:+886912345678 //RFC3966:tel:+886-912-345-678 Console.WriteLine("Is Mobile:"+ (phoneNumberUtil.GetNumberType(resultTaiwanNum5) == PhoneNumbers.PhoneNumberType.MOBILE).ToString()); Console.WriteLine("INTERNATIONAL:" + phoneNumberUtil.Format(resultTaiwanNum4, PhoneNumbers.PhoneNumberFormat.INTERNATIONAL)); Console.WriteLine("NATIONAL:" + phoneNumberUtil.Format(resultTaiwanNum4, PhoneNumbers.PhoneNumberFormat.NATIONAL)); Console.WriteLine("E164:" + phoneNumberUtil.Format(resultTaiwanNum4, PhoneNumbers.PhoneNumberFormat.E164)); Console.WriteLine("RFC3966:" + phoneNumberUtil.Format(resultTaiwanNum4, PhoneNumbers.PhoneNumberFormat.RFC3966)); //Is Mobile:False //INTERNATIONAL:+886 2 2960 3456 //NATIONAL:02 2960 3456 //E164:+886229603456 //RFC3966:tel:+886-2-2960-3456



結果我就寫在 code 裡面了 ,特別感謝Roger 告訴我這套件還有 南投縣政府 的電話號碼

 reference:

https://github.com/twcclegg/libphonenumber-csharp

https://www.nuget.org/packages/libphonenumber-csharp/

https://github.com/twcclegg/libphonenumber-csharp





當麻許的碎念筆記 2014 | Donma Hsu Design.