1 package com.linbilin.phone;
2
3 import java.util.regex.Matcher;
4 import java.util.regex.Pattern;
5
6 public class CheckPhone {
7
8 /** 电话格式验证 **/
9 private static final String PHONE_CALL_PATTERN = "^(\\(\\d{3,4}\\)|\\d{3,4}-)?\\d{7,8}(-\\d{1,4})?$";
10
11 /**
12 * 中国电信号码格式验证 手机段: 133,153,180,181,189,177,1700
13 * **/
14 private static final String CHINA_TELECOM_PATTERN = "(^1(33|53|77|8[019])\\d{8}$)|(^1700\\d{7}$)";
15
16 /**
17 * 中国联通号码格式验证 手机段:130,131,132,155,156,185,186,145,176,1709
18 * **/
19 private static final String CHINA_UNICOM_PATTERN = "(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\\d{8}$)|(^1709\\d{7}$)";
20
21 /**
22 * 中国移动号码格式验证
23 * 手机段:134,135,136,137,138,139,150,151,152,157,158,159,182,183,184
24 * ,187,188,147,178,1705
25 * **/
26 private static final String CHINA_MOBILE_PATTERN = "(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\\d{8}$)|(^1705\\d{7}$)";
27 /**
28 * 验证电话号码的格式
29 *
30 * @author LinBilin
31 * @param str
32 * 校验电话字符串
33 * @return 返回true,否则为false
34 */
35 public static boolean isPhoneCallNum(String str) {
36
37 return str == null || str.trim().equals("") ? false : match(
38 PHONE_CALL_PATTERN, str);
39 }
40
41 /**
42 * 验证【电信】手机号码的格式
43 *
44 * @author LinBilin
45 * @param str
46 * 校验手机字符串
47 * @return 返回true,否则为false
48 */
49 public static boolean isChinaTelecomPhoneNum(String str) {
50
51 return str == null || str.trim().equals("") ? false : match(
52 CHINA_TELECOM_PATTERN, str);
53 }
54
55 /**
56 * 验证【联通】手机号码的格式
57 *
58 * @author LinBilin
59 * @param str
60 * 校验手机字符串
61 * @return 返回true,否则为false
62 */
63 public static boolean isChinaUnicomPhoneNum(String str) {
64
65 return str == null || str.trim().equals("") ? false : match(
66 CHINA_UNICOM_PATTERN, str);
67 }
68
69 /**
70 * 验证【移动】手机号码的格式
71 *
72 * @author LinBilin
73 * @param str
74 * 校验手机字符串
75 * @return 返回true,否则为false
76 */
77 public static boolean isChinaMobilePhoneNum(String str) {
78
79 return str == null || str.trim().equals("") ? false : match(
80 CHINA_MOBILE_PATTERN, str);
81 }
82
83
84 /**
85 * 验证手机和电话号码的格式
86 *
87 * @author LinBilin
88 * @param str
89 * 校验手机字符串
90 * @return 返回true,否则为false
91 */
92 public static boolean isPhoneNum(String str) {
93 // 如果字符串为空,直接返回false
94 if (str == null || str.trim().equals("")) {
95 return false;
96 } else {
97 int comma = str.indexOf(",");// 是否含有逗号
98 int caesuraSign = str.indexOf("、");// 是否含有顿号
99 int space = str.trim().indexOf(" ");// 是否含有空格
100 if (comma == -1 && caesuraSign == -1 && space == -1) {
101 // 如果号码不含分隔符,直接验证
102 str=str.trim();
103 return (isPhoneCallNum(str) || isChinaTelecomPhoneNum(str)
104 || isChinaUnicomPhoneNum(str) || isChinaMobilePhoneNum(str)) ? true
105 : false;
106 } else {
107 // 号码含分隔符,先把分隔符统一处理为英文状态下的逗号
108 if (caesuraSign != -1) {
109 str=str.replaceAll("、", ",");
110 }
111 if (space != -1) {
112 str=str.replaceAll(" ", ",");
113 }
114
115 String[] phoneNumArr = str.split(",");
116 //遍历验证
117 for (String temp : phoneNumArr) {
118 temp=temp.trim();
119 if (isPhoneCallNum(temp) || isChinaTelecomPhoneNum(temp)
120 || isChinaUnicomPhoneNum(temp)
121 || isChinaMobilePhoneNum(temp)) {
122 continue;
123 } else {
124 return false;
125 }
126 }
127 return true;
128 }
129
130 }
131
132 }
133
134 /**
135 * 执行正则表达式
136 *
137 * @param pat
138 * 表达式
139 * @param str
140 * 待验证字符串
141 * @return 返回true,否则为false
142 */
143 private static boolean match(String pat, String str) {
144 Pattern pattern = Pattern.compile(pat);
145 Matcher match = pattern.matcher(str);
146 return match.find();
147 }
148
149 public static void main(String[] args) {
150
151 System.out.println(isPhoneNum("17750581369"));
152 System.out.println(isPhoneNum("13306061248"));
153 System.out.println(isPhoneNum("17750581369,13306061248"));
154 System.out.println(isPhoneNum("17750581369 13306061248"));
155 System.out.println(isPhoneNum("17750581369、13306061248"));
156 System.out.println(isPhoneNum("0596-3370653"));
157
158 }
159
160 }