本程序可查询3位、5位、7位、8位、11位的电话号码,并且能够分辨出其号码是电信、移动、联通、卫星、座机、还有地址、省、区市。这个程序的代码和前几天发的那篇博客,部分代码进行了优化。

号码号段编辑
中国移动号段:134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、172、178、182、183、184、187、188、195、197、198
中国联通号段:130、131、132、145、155、156、166、176、185、186、196
中国电信号段:133、149、153 、180 、181 、189、173、177、190、191、193、199
中国广电号段:192
虚拟运营商号段:
联通:167、1704、1707、1708、1709、171
电信:162、1700、1701、1702
移动:165、1705、1706
物联网号段:
联通:1400、146
电信:1410
移动:1440、148
卫星电话号段:
电信:1349、1740(0-5)

package phonemuber;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import java.io.DataInputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class Phonenuber extends JFrame implements ActionListener {

    JPanel jpN;
    JPanel jpS;
    JLabel jLabel;
    JTextField jTextField;
    JButton jButton;
    JTextArea jTextArea;

    Phonenuber() {
        jpN = new JPanel();
        jpS = new JPanel();
        jLabel = new JLabel("请输入电话号码");
        jTextField = new JTextField(20);
        jButton = new JButton("查询");
        jTextArea = new JTextArea(50, 50);
        jpN.add(jLabel);
        jpN.add(jTextField);
        jpN.add(jButton);
        jpS.add(jTextArea);
        jButton.addActionListener(this);
        this.add(jpN, BorderLayout.NORTH);
        this.add(jpS, BorderLayout.CENTER);
        this.setTitle("电话号码检测程序");
        this.setVisible(true);
        this.setBounds(400, 200, 800, 600);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jButton) {
            String regex = "^((13[0-9])|(14[5,7,9])|(15[0-3][5-9])|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
            String phoneNumber = jTextField.getText().replace(" ", "");
            boolean isNumber=isInteger(phoneNumber);
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(phoneNumber);
            boolean isMatch = m.matches();
            if (isNumber){
                if (phoneNumber.length() >= 3) {
                    if (phoneNumber.length() == 11) {
                        if (isMatch) {
                            String result = elevenValidate(phoneNumber);
                            jTextArea.setText("手机号码  "+result+""+getCityUrl(phoneNumber));
                        } else {
                            jTextArea.setText("请输入正确的电话号码");
                        }
                    } else if (phoneNumber.length() == 3) {
                        jTextArea.setText(threeValidate(phoneNumber));
                    } else if (phoneNumber.length() == 5) {

                        jTextArea.setText(fiveValidate(phoneNumber));
                    }else if (phoneNumber.length() == 7||phoneNumber.length() == 8) {

                        jTextArea.setText(sevenAndEightValidate(phoneNumber));
                    } else if (phoneNumber.length() == 10) {

                        jTextArea.setText("服务电话号码");
                    }else {
                        jTextArea.setText("请输入正确的电话号码");
                    }

                } else {
                    jTextArea.setText("请输入正确的电话号码");
                }
            }else{
                jTextArea.setText("请输入字符为数字的正确的电话号码");
            }
        }
    }
    public static boolean isInteger(String str) {
        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
        return pattern.matcher(str).matches();
    }
    public  String getCityUrl(String mobile) {
        String url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm";
        StringBuilder sb = new StringBuilder(url);
        Map<String, String> params = new HashMap<String, String>();
        params.put("tel", mobile);
     /*   params.put("status","1");//固定值
        params.put("modeltype", "7");//固定值*/
        String result = GetPostUrl(sb.toString(), params, "GET",null, 0, 0);

        return result;
    }

    public static String GetPostUrl(String sendUrl, Map<String, String> params, String sendType, String charset,
                                    int repeat_request_count, int repeat_request_max_count) {
        URL url = null;
        HttpURLConnection httpurlconnection = null;
        try {
            // 构建请求参数
            StringBuffer paramSb = new StringBuffer();
            if (params != null) {
                for (java.util.Map.Entry<String, String> e : params.entrySet()) {
                    paramSb.append(e.getKey());
                    paramSb.append("=");
                    // 将参数值urlEncode编码,防止传递中乱码
                    paramSb.append(URLEncoder.encode(e.getValue(), "UTF-8"));
                    paramSb.append("&");
                }
                paramSb.substring(0, paramSb.length() - 1);
            }
            url = new URL(sendUrl + "?" + paramSb.toString());
            httpurlconnection = (HttpURLConnection) url.openConnection();
            httpurlconnection.setRequestMethod("GET");
            httpurlconnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            httpurlconnection.setDoInput(true);
            httpurlconnection.setDoOutput(true);

            // 设置http请求超时时间30000毫秒(30秒)
            httpurlconnection.setConnectTimeout(30000);
            httpurlconnection.setReadTimeout(30000);
            httpurlconnection.setUseCaches(true);
            int code = httpurlconnection.getResponseCode();
            if (code == 200) {
                DataInputStream in = new DataInputStream(httpurlconnection.getInputStream());
                int len = in.available();
                byte[] by = new byte[len];
                in.readFully(by);
                String rev = new String(by, "GBK");

                in.close();
                String arr=rev.toString().split("\t")[0];
                String city=arr.split(",")[2].replace("catName","运营商")+arr.split(",")[1].replace("province","归属地");
                return city;
            } else {
                // http 请求返回非 200状态时处理
                return "<?xml version=\"1.0\" encoding=\"utf-8\" ?><error>发送第三方请求失败</error>";
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (httpurlconnection != null) {
                httpurlconnection.disconnect();
            }
        }
        return null;
    }

    public String sevenAndEightValidate(String phoneNumber){
        String result = "座机号码   ";
        return result;
    }

    public String fiveValidate(String phoneNumber) {
        String result = "服务电话号码   ";
        switch(phoneNumber){
            case "12110":
                result +="公安短信报警号码";
                break;
            case "11185":
                result +="邮政客户服务电话";
                break;
            case "12348":
                result +="全国法律服务热线";
                break;
            case "12395":
                result +="水上遇险求救电话";
                break;
            case "12121":
                result +="气象服务电话";
                break;
            case "12117":
                result +="报时服务电话";
                break;
            case "95119":
                result +="森林火警电话";
                break;
            case "12306":
                result +="全国铁路客服中心";
                break;

            case "95598":
                result +="电力系统客服电话";
                break;
            case "12315":
                result +="消费者投诉举报专线电话";
                break;
            case "12365":
                result +="质量监督电话";
                break;
            case "12369":
                result +="环保局监督电话";
                break;
            case "12345":
                result +="政府公益服务接入网";
                break;
            case "12318":
                result +="文化市场统一举报电话";
                break;
            case "12358":
                result +="价格监督举报电话";
                break;
            case "12310":
                result +="机构编制违规举报热线";
                break;
            case "12333":
                result +="民工维权热线电话";
                break;
            case "12320":
                result +="公共卫生环境投诉";
                break;
            case "10000":
                result +="中国电信客户服务热线";
                break;
            case "10086":
                result +="中国移动客服热线";
                break;
            case "17911":
                result +="中国联通IP号码";
                break;
            case "10050":
                result +="铁通客户服务";
                break;
            case "10010":
                result +="中国联通客服热线";
                break;
            case "17900":
                result +="中国电信IP电话卡";
                break;
            case "17951":
                result +="中国移动IP号码";
                break;
            case "95555":
                result +="招商银行";
                break;
            case "95566":
                result +="中国银行";
                break;
            case "95533":
                result +="建设银行";
                break;
            case "95588":
                result +="工商银行";
                break;
            case "95558":
                result +="中信银行";
                break;
            case "95528":
                result +="浦发银行";
                break;
            case "95501":
                result +="深发银行";
                break;
            case "95599":
                result +="农业银行";
                break;

            case "95568":
                result +="民生银行";
                break;
            case "95595":
                result +="光大银行";
                break;
            case "95559":
                result +="交通银行";
                break;
            case "95508":
                result +="广发银行";
                break;
            case "95577":
                result +="华夏银行";
                break;
            case "95561":
                result +="兴业银行";
                break;
            case "95543":
                result +="申通快递";
                break;
            case "95546":
                result +="韵达快递";
                break;
            case "95311":
                result +="中通快递";
                break;
            case "95338":
                result +="顺丰速运";
                break;
            case "95554":
                result +="圆通快递";
                break;
            case "95353":
                result +="德邦物流";
                break;
            case "95500":
                result +="太平洋保险";
                break;
            case "95511":
                result +="平安保险";
                break;
            case "95515":
                result +="合众人寿保险";
                break;
            case "95519":
                result +="中国人寿保险";
                break;
            case "95522":
                result +="合众人寿保险";
                break;
            case "95567":
                result +="新华人寿保险";
                break;
            case "95589":
                result +="太平保险";
                break;
            case "95596":
                result +="民生人寿保险";
                break;
            case "95510":
                result +="阳光保险";
                break;
            case "95512":
                result +="平安产险";
                break;
            case "95518":
                result +="中国人民保险";
                break;
            case "95535":
                result +="生命人寿保险";
                break;
            case "95585":
                result +="中华保险";
                break;
            case "95590":
                result +="大地保险";
                break;
            default:
                result="请输入正确的号码";
        }
        return result;
    }

    public String threeValidate(String phoneNumber) {
        String result = null;
        switch(phoneNumber) {
            case "110":
                result = "紧急电话  报警求助电话";
                break;
            case "120":
                result = "紧急电话  急救中心电话";
                break;
            case "119":
                result = "紧急电话  火警报警电话";
                break;
            case "117":
                result = "公共服务电话  报时服务电话";
                break;
            case "184":
                result = "公共服务电话  国内邮政编码查询电话";
                break;
            case "122":
                result = "紧急电话  交通事故报警电话";
                break;
            case "999":
                result = "紧急电话  红十字会急救台";
                break;
            case "114":
                result = "公共服务电话  电话及长途区号查询";
                break;
            case "121":
                result = "公共服务电话  天气预报查询号码";
                break;
            default:
                result = "请输入正确号码";
        }

        return result;
    }
    public String elevenValidate(String phoneNumber) {
        String result = null;
        String subResult = phoneNumber.substring(0, 3);
        switch (subResult) {
            case "133":
                result = "中国电信";
                break;
            case "149":
                result = "中国电信";
                break;
            case "153":
                result = "中国电信";
                break;
            case "170":
                String subString = phoneNumber.substring(0, 4);
                switch(subString) {
                    case "1700":
                        result = "虚拟运营商 电信";
                        break;
                    case "1701":
                        result = "虚拟运营商 电信";
                        break;
                    case "1702":
                        result = "虚拟运营商 电信";
                        break;
                    case "1703":
                        result = "虚拟运营商 移动";
                        break;
                    case "1705":
                        result = "虚拟运营商 移动";
                        break;
                    case "1706":
                        result = "虚拟运营商 移动";
                        break;
                    case "1704":
                        result = "虚拟运营商 联通";
                        break;
                    case "1707":
                        result = "虚拟运营商 联通";
                        break;
                    case "1708":
                        result = "虚拟运营商 联通";
                        break;
                    case "1709":
                        result = "虚拟运营商 联通";
                        break;
                    default:
                        result = "中国电信";
                        break;
                }
                break;
            case "173":
                result = "中国电信";
                break;
            case "177":
                result = "中国电信";
                break;
            case "180":
                result = "中国电信";
                break;
            case "181":
                result = "中国电信";
                break;
            case "189":
                result = "中国电信";
                break;
            case "199":
                result = "中国电信";
                break;
            case "130":
                result = "中国联通";
                break;
            case "131":
                result = "中国联通";
                break;
            case "132":
                result = "中国联通";
                break;
            case "145":
                result = "中国联通";
                break;
            case "155":
                result = "中国联通";
                break;
            case "156":
                result = "中国联通";
                break;
            case "166":
                result = "中国联通";
                break;
            case "171":
                result = "虚拟运营商 联通";
                break;
            case "175":
                result = "中国联通";
                break;
            case "176":
                result = "中国联通";
                break;
            case "185":
                result = "中国联通";
                break;
            case "186":
                result = "中国联通";
                break;
            case "134":
                result = "中国移动";
                break;
            case "135":
                result = "中国移动";
                break;
            case "136":
                result = "中国移动";
                break;
            case "137":
                result = "中国移动";
                break;
            case "138":
                result = "中国移动";
                break;
            case "139":
                result = "中国移动";
                break;
            case "147":
                result = "中国移动";
                break;
            case "150":
                result = "中国移动";
                break;
            case "151":
                result = "中国移动";
                break;
            case "152":
                result = "中国移动";
                break;
            case "157":
                result = "中国移动";
                break;
            case "158":
                result = "中国移动";
                break;
            case "159":
                result = "中国移动";
                break;
            case "178":
                result = "中国移动";
                break;
            case "182":
                result = "中国移动";
                break;
            case "183":
                result = "中国移动";
                break;
            case "184":
                result = "中国移动";
                break;
            case "187":
                result = "中国移动";
                break;
            case "188":
                result = "中国移动";
                break;
            case "198":
                result = "中国移动";
                break;
        }
        return result;
    }
    public static void main(String[] s) {
        new Phonenuber();
    }
}