android 根据区号判断手机号码是否符合格式


    在Android项目开发中,在注册或者其他需要手机号码的地方,经常需要校验手机号码的有效性,那么我们如何判断手机号码的有效性呢,当然首先想到的是根据正则表达式来判断,不过不同国家的手机号码的长度不一样,同时我们要根据区号来判断是否该号码符合该区号,那么我们可以怎么做呢?下面提供一个我在项目中用到的方法。


   首先,导入这个jar包。

    http://pan.baidu.com/s/1kUKRayr


  其次,在你的android  studio的values/arrays.xml中插入这个国家区号和国家简称对应的数组:

  

   
    
    
        
     
     
      
      376,AD
     
     
        
     
     
      
      971,AE
     
     
        
     
     
      
      93,AF
     
     
        
     
     
      
      355,AL
     
     
        
     
     
      
      374,AM
     
     
        
     
     
      
      599,AN
     
     
        
     
     
      
      244,AO
     
     
        
     
     
      
      672,AQ
     
     
        
     
     
      
      54,AR
     
     
        
     
     
      
      43,AT
     
     
        
     
     
      
      61,AU
     
     
        
     
     
      
      297,AW
     
     
        
     
     
      
      994,AZ
     
     
        
     
     
      
      387,BA
     
     
        
     
     
      
      880,BD
     
     
        
     
     
      
      32,BE
     
     
        
     
     
      
      226,BF
     
     
        
     
     
      
      359,BG
     
     
        
     
     
      
      973,BH
     
     
        
     
     
      
      257,BI
     
     
        
     
     
      
      229,BJ
     
     
        
     
     
      
      590,BL
     
     
        
     
     
      
      673,BN
     
     
        
     
     
      
      591,BO
     
     
        
     
     
      
      55,BR
     
     
        
     
     
      
      975,BT
     
     
        
     
     
      
      267,BW
     
     
        
     
     
      
      375,BY
     
     
        
     
     
      
      501,BZ
     
     
        
     
     
      
      1,CA
     
     
        
     
     
      
      61,CC
     
     
        
     
     
      
      243,CD
     
     
        
     
     
      
      236,CF
     
     
        
     
     
      
      242,CG
     
     
        
     
     
      
      41,CH
     
     
        
     
     
      
      225,CI
     
     
        
     
     
      
      682,CK
     
     
        
     
     
      
      56,CL
     
     
        
     
     
      
      237,CM
     
     
        
     
     
      
      86,CN
     
     
        
     
     
      
      57,CO
     
     
        
     
     
      
      506,CR
     
     
        
     
     
      
      53,CU
     
     
        
     
     
      
      238,CV
     
     
        
     
     
      
      61,CX
     
     
        
     
     
      
      357,CY
     
     
        
     
     
      
      420,CZ
     
     
        
     
     
      
      49,DE
     
     
        
     
     
      
      253,DJ
     
     
        
     
     
      
      45,DK
     
     
        
     
     
      
      213,DZ
     
     
        
     
     
      
      593,EC
     
     
        
     
     
      
      372,EE
     
     
        
     
     
      
      20,EG
     
     
        
     
     
      
      291,ER
     
     
        
     
     
      
      34,ES
     
     
        
     
     
      
      251,ET
     
     
        
     
     
      
      358,FI
     
     
        
     
     
      
      679,FJ
     
     
        
     
     
      
      500,FK
     
     
        
     
     
      
      691,FM
     
     
        
     
     
      
      298,FO
     
     
        
     
     
      
      33,FR
     
     
        
     
     
      
      241,GA
     
     
        
     
     
      
      44,GB
     
     
        
     
     
      
      995,GE
     
     
        
     
     
      
      233,GH
     
     
        
     
     
      
      350,GI
     
     
        
     
     
      
      299,GL
     
     
        
     
     
      
      220,GM
     
     
        
     
     
      
      224,GN
     
     
        
     
     
      
      240,GQ
     
     
        
     
     
      
      30,GR
     
     
        
     
     
      
      502,GT
     
     
        
     
     
      
      245,GW
     
     
        
     
     
      
      592,GY
     
     
        
     
     
      
      852,HK
     
     
        
     
     
      
      504,HN
     
     
        
     
     
      
      385,HR
     
     
        
     
     
      
      509,HT
     
     
        
     
     
      
      36,HU
     
     
        
     
     
      
      62,ID
     
     
        
     
     
      
      353,IE
     
     
        
     
     
      
      972,IL
     
     
        
     
     
      
      44,IM
     
     
        
     
     
      
      91,IN
     
     
        
     
     
      
      964,IQ
     
     
        
     
     
      
      98,IR
     
     
        
     
     
      
      39,IT
     
     
        
     
     
      
      962,JO
     
     
        
     
     
      
      81,JP
     
     
        
     
     
      
      254,KE
     
     
        
     
     
      
      996,KG
     
     
        
     
     
      
      855,KH
     
     
        
     
     
      
      686,KI
     
     
        
     
     
      
      269,KM
     
     
        
     
     
      
      850,KP
     
     
        
     
     
      
      82,KR
     
     
        
     
     
      
      965,KW
     
     
        
     
     
      
      7,KZ
     
     
        
     
     
      
      856,LA
     
     
        
     
     
      
      961,LB
     
     
        
     
     
      
      423,LI
     
     
        
     
     
      
      94,LK
     
     
        
     
     
      
      231,LR
     
     
        
     
     
      
      266,LS
     
     
        
     
     
      
      370,LT
     
     
        
     
     
      
      352,LU
     
     
        
     
     
      
      371,LV
     
     
        
     
     
      
      218,LY
     
     
        
     
     
      
      212,MA
     
     
        
     
     
      
      377,MC
     
     
        
     
     
      
      373,MD
     
     
        
     
     
      
      382,ME
     
     
        
     
     
      
      261,MG
     
     
        
     
     
      
      692,MH
     
     
        
     
     
      
      389,MK
     
     
        
     
     
      
      223,ML
     
     
        
     
     
      
      95,MM
     
     
        
     
     
      
      976,MN
     
     
        
     
     
      
      853,MO
     
     
        
     
     
      
      222,MR
     
     
        
     
     
      
      356,MT
     
     
        
     
     
      
      230,MU
     
     
        
     
     
      
      960,MV
     
     
        
     
     
      
      265,MW
     
     
        
     
     
      
      52,MX
     
     
        
     
     
      
      60,MY
     
     
        
     
     
      
      258,MZ
     
     
        
     
     
      
      264,NA
     
     
        
     
     
      
      687,NC
     
     
        
     
     
      
      227,NE
     
     
        
     
     
      
      234,NG
     
     
        
     
     
      
      505,NI
     
     
        
     
     
      
      31,NL
     
     
        
     
     
      
      47,NO
     
     
        
     
     
      
      977,NP
     
     
        
     
     
      
      674,NR
     
     
        
     
     
      
      683,NU
     
     
        
     
     
      
      64,NZ
     
     
        
     
     
      
      968,OM
     
     
        
     
     
      
      507,PA
     
     
        
     
     
      
      51,PE
     
     
        
     
     
      
      689,PF
     
     
        
     
     
      
      675,PG
     
     
        
     
     
      
      63,PH
     
     
        
     
     
      
      92,PK
     
     
        
     
     
      
      48,PL
     
     
        
     
     
      
      508,PM
     
     
        
     
     
      
      870,PN
     
     
        
     
     
      
      1,PR
     
     
        
     
     
      
      351,PT
     
     
        
     
     
      
      680,PW
     
     
        
     
     
      
      595,PY
     
     
        
     
     
      
      974,QA
     
     
        
     
     
      
      40,RO
     
     
        
     
     
      
      381,RS
     
     
        
     
     
      
      7,RU
     
     
        
     
     
      
      250,RW
     
     
        
     
     
      
      966,SA
     
     
        
     
     
      
      677,SB
     
     
        
     
     
      
      248,SC
     
     
        
     
     
      
      249,SD
     
     
        
     
     
      
      46,SE
     
     
        
     
     
      
      65,SG
     
     
        
     
     
      
      290,SH
     
     
        
     
     
      
      386,SI
     
     
        
     
     
      
      421,SK
     
     
        
     
     
      
      232,SL
     
     
        
     
     
      
      378,SM
     
     
        
     
     
      
      221,SN
     
     
        
     
     
      
      252,SO
     
     
        
     
     
      
      597,SR
     
     
        
     
     
      
      239,ST
     
     
        
     
     
      
      503,SV
     
     
        
     
     
      
      963,SY
     
     
        
     
     
      
      268,SZ
     
     
        
     
     
      
      235,TD
     
     
        
     
     
      
      228,TG
     
     
        
     
     
      
      66,TH
     
     
        
     
     
      
      992,TJ
     
     
        
     
     
      
      690,TK
     
     
        
     
     
      
      670,TL
     
     
        
     
     
      
      993,TM
     
     
        
     
     
      
      216,TN
     
     
        
     
     
      
      676,TO
     
     
        
     
     
      
      90,TR
     
     
        
     
     
      
      688,TV
     
     
        
     
     
      
      886,TW
     
     
        
     
     
      
      255,TZ
     
     
        
     
     
      
      380,UA
     
     
        
     
     
      
      256,UG
     
     
        
     
     
      
      1,US
     
     
        
     
     
      
      598,UY
     
     
        
     
     
      
      998,UZ
     
     
        
     
     
      
      39,VA
     
     
        
     
     
      
      58,VE
     
     
        
     
     
      
      84,VN
     
     
        
     
     
      
      678,VU
     
     
        
     
     
      
      681,WF
     
     
        
     
     
      
      685,WS
     
     
        
     
     
      
      967,YE
     
     
        
     
     
      
      262,YT
     
     
        
     
     
      
      27,ZA
     
     
        
     
     
      
      260,ZM
     
     
        
     
     
      
      263,ZW
     
     
    
    
    


   然后,现在,比如我们输入了一个手机号,区号CountryCode="+86", phoneNumber="15813849762" ,那么我们如何判断该手机号是否符合格式呢?


    第一步: 根据这个CountryCode获取对应的国家简称,可以用以下这个方法,遍历以上的数组,得到国家的简称;


     

String countryCode =getPhoneCountryCode(CountryCode.replace("+", ""), getResources().getStringArray(R.array.CountryCodes))[1];
   得到的 countryCode 指得是国家简称

     

/**
 *
 * @param phone  :不带"+"号的区号.例如:86
 * @param countryCodes  :values/arrays中存储的区号数组
 * @return  :String[0]:当前传入的区号,string[1]:当前区号对应的国家简称
 */
public static String[] getPhoneCountryCode(String phone, String[] countryCodes) {
    String[] countryCode = new String[2];
    countryCode[0] = "";
    countryCode[1] = "";

    for (int i = 0; i < countryCodes.length; i++) {
        try{
       
            if(countryCodes[i].split(",")[0].toString().equals(phone)){
                countryCode[0] = countryCodes[i].split(",")[0];  //得到区号
                countryCode[1] = countryCodes[i].split(",")[1];  //得到区号对应的国家简称
                break;
            }

        }catch (Exception e){e.printStackTrace();
        }

    }

    return countryCode;
}
    第二步: 调用我们在上面导入的库来帮助我们判断该手机号码的有效性

  

boolean   isValid=isPhoneNumberValid(phoneNumber, countryCode );

 

/**
 * 根据区号判断是否是正确的电话号码
 * @param phoneNumber :不带区号的电话号码
 * @param countryCode :国家简称
          return :true 合法  false:不合法  
 */
public static boolean isPhoneNumberValid(String phoneNumber, String countryCode)

{
    System.out.println("isPhoneNumberValid: "+phoneNumber+"/"+countryCode);
    //NOTE: This should probably be a member variable.
    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();

    try
    {
        Phonenumber.PhoneNumber numberProto = phoneUtil.parse(phoneNumber, countryCode);
        return phoneUtil.isValidNumber(numberProto);
    }
    catch (NumberParseException e)
    {
        System.err.println("NumberParseException was thrown: " + e.toString());
    }

    return false;
}
    it's over .


  另外,我们可以通过TelephonyManager.getSimCountryIso()来获取手机电话卡所代表的国家区号简称,然后和以上该数组匹配得到实际的区号即可,不过由于手机系统的权限和安全问题,所以并不是所有手机都能获取到SIM卡的区号。

/**
 * 直接输出电话卡的区号
 * @param context
 * @return
 */
public static String getCountryZipCode(Context context){
    String CountryID="";
    String CountryZipCode="";

    TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    //getNetworkCountryIso
    CountryID= manager.getSimCountryIso().toUpperCase();
    String[] rl=context.getResources().getStringArray(R.array.CountryCodes);
    for(int i=0;i<rl.length;i++){
        String[] g=rl[i].split(",");
        if(g[1].trim().equals(CountryID.trim())){
            CountryZipCode=g[0];
            break;
        }
    }
    return CountryZipCode;
}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值