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

  • 152
  • 0
  • 2025-11-18

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

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

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

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

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


 


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 告訴我這套件還有 南投縣政府 的電話號碼

-

本文原文首發於我的個人部落格:使用 libphonenumber-csharp 判斷電話正確,檢查是不是手機或是室內電話

 reference:

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

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

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

https://blog.no2don.com/2023/02/csharp-libphonenumber-check-is-mobile.html

 

---

Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer.