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

首先,导入这个jar包。

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

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

   376,AD971,AE93,AF355,AL374,AM599,AN244,AO672,AQ54,AR43,AT61,AU297,AW994,AZ387,BA880,BD32,BE226,BF359,BG973,BH257,BI229,BJ590,BL673,BN591,BO55,BR975,BT267,BW375,BY501,BZ1,CA61,CC243,CD236,CF242,CG41,CH225,CI682,CK56,CL237,CM86,CN57,CO506,CR53,CU238,CV61,CX357,CY420,CZ49,DE253,DJ45,DK213,DZ593,EC372,EE20,EG291,ER34,ES251,ET358,FI679,FJ500,FK691,FM298,FO33,FR241,GA44,GB995,GE233,GH350,GI299,GL220,GM224,GN240,GQ30,GR502,GT245,GW592,GY852,HK504,HN385,HR509,HT36,HU62,ID353,IE972,IL44,IM91,IN964,IQ98,IR39,IT962,JO81,JP254,KE996,KG855,KH686,KI269,KM850,KP82,KR965,KW7,KZ856,LA961,LB423,LI94,LK231,LR266,LS370,LT352,LU371,LV218,LY212,MA377,MC373,MD382,ME261,MG692,MH389,MK223,ML95,MM976,MN853,MO222,MR356,MT230,MU960,MV265,MW52,MX60,MY258,MZ264,NA687,NC227,NE234,NG505,NI31,NL47,NO977,NP674,NR683,NU64,NZ968,OM507,PA51,PE689,PF675,PG63,PH92,PK48,PL508,PM870,PN1,PR351,PT680,PW595,PY974,QA40,RO381,RS7,RU250,RW966,SA677,SB248,SC249,SD46,SE65,SG290,SH386,SI421,SK232,SL378,SM221,SN252,SO597,SR239,ST503,SV963,SY268,SZ235,TD228,TG66,TH992,TJ690,TK670,TL993,TM216,TN676,TO90,TR688,TV886,TW255,TZ380,UA256,UG1,US598,UY998,UZ39,VA58,VE84,VN678,VU681,WF685,WS967,YE262,YT27,ZA260,ZM263,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;
}

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

  1. JSK-129 判断日期是否符合格式【入门】

    判断日期是否符合格式 我们知道一年有12个月,每个月最多有31天,年有平年和闰年之分,本题目要求如果输入一个日期,程序需要判断用户输入的日期是否正确. 输入:用户输入是三个数字,分别表示年,月和日. ...

  2. 判断手机号码是否符合要求

    我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678.特点如下: 1. 长度13位: 2. 以86的国家码打头: 3. 手机号码的每一位都是数字. 请实现手机号码合法 ...

  3. Android 根据身份证号判断性别

    /*** 1 man 2 girl 果是奇数性别为男,偶数则为女.*/public static int isSex(String idCard) {if (!TextUtils.isEmpty(id ...

  4. js判断手机号码是否正确格式

    function phone(TEL) {var strTemp = /^1[3|4|5|6|7|8|9][0-9]{9}$/;if (strTemp.test(TEL)) {return true; ...

  5. [转载]JAVA号码工具类:实现手机固话号码判断与区号截取

    工具类说明 该工具类主要是用于判断号码的类型,如果是手机类型,则返回号码前7位,便于后面继续判断号码归属地:如果是固话类型,则截取固话的区号,同样也是为了后面判断号码的归属地. 在获取到这些信息之后, ...

  6. iOS判断国内固定电话区号

    最近在项目中需要对用户填写的固定电话做处理希望要的格式为例如 010-12345678 样式的. 但很不巧的是我在iOS客户端可以严格约束用户输入指定格式的固定电话(使用两个文本框,一个用来接收区号, ...

  7. 手机固话号码判断与区号截取

    主要用到的正则表达式: //用于匹配手机号码 private final static String REGEX_MOBILEPHONE = "^0?1[3458]\\d{9}$" ...

  8. 电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号)...

    ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{ ...

  9. 网易有道 IP地址、邮编区号及城市查询、手机号码归属地和身份证 查询接口API

    http://blog.csdn.net/go_to_learn/article/details/8296412 具体有多少个接口,不得而知,目前网上搜索的就知道四个: 查询IP地址: http:// ...

最新文章

  1. SQL基础学习总结:1(数据库)
  2. mysql 存储过程与存储函数
  3. 岗位推荐 | 清华大学CoAI实验室招聘博士后
  4. mac端addr2line的NDK位置和使用
  5. 一个写得很不错的vuex详解(转)
  6. web自动化如何在不同浏览器运行_自动化决策环节的“心脏”将如何与众不同?...
  7. docker安装xxl-job-admin步骤
  8. 【VTK】VTK 之一 环境准备
  9. easypr arm linux,zhangdy
  10. 文件被占用?系统自带的“资源监视器(resmon)”也能帮你找到占用它的真凶
  11. CSS中的传统布局、多列布局、弹性伸缩布局及Emmet工具
  12. Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片
  13. node.js如何升级
  14. 做外贸用哪个企业邮箱比较好?大容量外贸企业邮箱哪家好?
  15. 看完张一鸣、王兴、雷军的600条语录,整理出给年轻人的50条建议!
  16. STM32F103最小系统原理图
  17. PHP的一些常用算法
  18. 星际2亚洲服务器 也就是韩服
  19. linux-关机命令shutdown
  20. Mysql备份恢复(mysqldump)

热门文章

  1. 关于post请求接受不到参数
  2. js中获取元素的当前位置
  3. 晓阮论金:5.17原油沥青高位承压,日内能否冲高回落?附操作策略
  4. 程序员在线练习打字的网页
  5. matlab的输入字符串接收,matlab字符串操作总结
  6. python 冷门知识点_Python中的10条冷门知识
  7. 词缀temper/tempor/tempt/tend等词根衍生单词
  8. 数据治理 | 质检监控中心
  9. 光学系统中的光栅建模——实例讨论
  10. php声音转换工具,音乐格式转换工具(AudioRetoucher 5)