手機号會存在加區号/國際ip号的問題,如+8615851732142、008615851732142、17951158517332142或者0158517321142,上面幾個号碼實際都是同一個号碼,但加了不同的字首。程式中會将上面幾種情況視為同一個号碼,具體邏輯如下:

java參考代碼
......
String tel = "+008613701234567";
//手機号正則
String reg = "^[0-9\\+]*?1[3456789]\\d{9}$";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = null;
//過濾非數字字元 如 158-517 234 34 =》 15851723434
tel = tel.replaceAll("\\D", "");
//比對手機号
matcher = pattern.matcher(tel);
if(tel.length() >= 11 && matcher.find()){
tel = tel.substring(tel.length() - 11);
}else if(tel.length()>=7){//固話号碼(區号+7/8位)、未比對到的手機号
tel=tel.substring(tel.length()-7);
}
......
注:按照上述邏輯僅适用于查詢後的處理(去重等),不可用于處理入庫前的号碼資料。因為,8位的固話号碼(或正則未比對到的手機号碼)會被截取為7位,處理後的号碼不再可撥打。
轉載于:https://my.oschina.net/u/2538940/blog/3025336