实现一个电话查询程序,实现的功能有输入一个电话还要号码,具体是电信的,联通的,移动的,还是虚拟运营商的都可以,除此之外,还可以查询归属地等等信息。如果有人有更优化的代码,可以在评论区一起交流讨论哦
```java
package phonebnumber1;
import com.sun.deploy.net.HttpResponse;
import phonemuber.Phonenuber;
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 Phonenumber extends JFrame implements ActionListener{
JPanel jpNumber;
JPanel jpSet;
JLabel jLabel;
JTextField jTextField;
JButton jButton;
JTextArea jTextArea;
Phonenumber() {
jpNumber = new JPanel();
jpSet = new JPanel();
jLabel = new JLabel("请输入电话号码");
jTextField = new JTextField(20);
jButton = new JButton("查询");
jTextArea = new JTextArea(50, 50);
jpNumber.add(jLabel);
jpNumber.add(jTextField);
jpNumber.add(jButton);
jpSet.add(jTextArea);
jButton.addActionListener(this);
this.add(jpNumber, BorderLayout.NORTH);
this.add(jpSet, 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("手机号码 "+phoneNumber+"\n"+"运营商"+"\n"+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 = null;
boolean sart = phoneNumber.startsWith("0") || phoneNumber.startsWith("1") || phoneNumber.startsWith("9");
if (sart) {
result="你的输入有错!";
}
else {
result="座机号码";
}
return result;
}
public String fiveValidate(String phoneNumber) {
String result = null;
boolean yunyinshang=phoneNumber.equals("10000")||phoneNumber.equals("10010")||phoneNumber.equals("10011")
||phoneNumber.equals("10060");//运营商热线
boolean zhengfurexian=phoneNumber.equals("11185")||phoneNumber.equals("12310")||phoneNumber.equals("12315")
||phoneNumber.equals("12319")||phoneNumber.equals("12333")||phoneNumber.equals("12345")
||phoneNumber.equals("12348")||phoneNumber.equals("12358")||phoneNumber.equals("12365")
||phoneNumber.equals("12366")||phoneNumber.equals("12369")||phoneNumber.equals("12591");//政府各部门各种热线
boolean jieru =phoneNumber.equals("12591")||phoneNumber.equals("16300")||phoneNumber.equals("17900")||phoneNumber.equals("17908")
||phoneNumber.equals("17901")||phoneNumber.equals("17909")||phoneNumber.equals("17990")||phoneNumber.equals("17990")
||phoneNumber.equals("17991")||phoneNumber.equals("17999")||phoneNumber.equals("17931")||phoneNumber.equals("17950")
||phoneNumber.equals("17950")||phoneNumber.equals("17951")||phoneNumber.equals("17910")||phoneNumber.equals("17911")
||phoneNumber.equals("17920")||phoneNumber.equals("17921");//运营商接入码
boolean jinji=phoneNumber.equals("95119")||phoneNumber.equals("12395");//应急电话
boolean baoxian=phoneNumber.equals("95511")||phoneNumber.equals("95518")
||phoneNumber.equals("95519")||phoneNumber.equals("95522");//保险
boolean qita=phoneNumber.equals("95033")||phoneNumber.equals("95116")||phoneNumber.equals("95118")||phoneNumber.equals("95120")||phoneNumber.equals("95160");//其他服务中心或企业
boolean yinhang=phoneNumber.equals("95533")||phoneNumber.equals("95555")
||phoneNumber.equals("95559")||phoneNumber.equals("95566")||phoneNumber.equals("95577")
||phoneNumber.equals("95588")||phoneNumber.equals("95595")
||phoneNumber.equals("95598")||phoneNumber.equals("95599");//银行
boolean kejigongsi=phoneNumber.equals("95766")||phoneNumber.equals("95777")||phoneNumber.equals("95803");//其他科技公司
// ||phoneNumber.equals("9580")||
boolean xunhuzhongxin =phoneNumber.startsWith("958")||phoneNumber.startsWith("96");//寻呼中心
if(yunyinshang){
result="运营商服务热线";
}
else if (zhengfurexian){
result="政府各部门热线";
}
else if(jieru){
result = "各类运营商接入码";
}
else if (jinji){
result = "应急电话";
}
else if (baoxian){
result="各类保险号码";
}
else if (qita){
result="其他服务中心或企业";
}
else if(yinhang){
result="银行号码";
}
else if(kejigongsi){
result="各类科技公司";
}
else if (xunhuzhongxin){
result="寻呼号码";
}
else {
return result="你的输入不正确,请重新输入!";
}
return result;
}
public String threeValidate(String phoneNumber) {
String result = null;
boolean sart1 = phoneNumber.startsWith("0") || phoneNumber.startsWith("9") || phoneNumber.startsWith("9");
if (sart1) {
result="你的输入有错!";
}
else {
result="电话号码";
}
boolean one=phoneNumber.equals("110")||phoneNumber.equals("120")||phoneNumber.equals("119")
||phoneNumber.equals("122")||phoneNumber.equals("999");
boolean two=phoneNumber.equals("117")||phoneNumber.equals("184")
||phoneNumber.equals("114")||phoneNumber.equals("121");
if(one){
result="紧急电话";
}
else if (two){
result="公共服务号码";
}
else {
result = "请输入正确号码";
}
return result;
}
public String elevenValidate(String phoneNumber) {
String result = null;
/*String subResult = phoneNumber.substring(0, 3);*/
// 截取前3或前4位电话号码,判断运营商
String head1 = phoneNumber.substring(0, 3);
String head2 = phoneNumber.substring(0, 4);
// 移动前三位
boolean cmcctemp3 = head1.equals("134") || head1.equals("135") || head1.equals("136")
|| head1.equals("137") || head1.equals("138")
|| head1.equals("139") || head1.equals("147")
|| head1.equals("150") || head1.equals("151")
|| head1.equals("152") || head1.equals("157")
|| head1.equals("158") || head1.equals("159")
|| head1.equals("165") || head1.equals("178")
|| head1.equals("182") || head1.equals("183")
|| head1.equals("184") || head1.equals("187")
|| head1.equals("188") || head1.equals("198");
if (cmcctemp3) {
return result = "中国移动";
}
// 移动前4位
boolean cmcctemp4 = head2.equals("1340") || head2.equals("1341")
|| head2.equals("1342") || head2.equals("1343")
|| head2.equals("1344") || head2.equals("1345")
|| head2.equals("1346") || head2.equals("1347")
|| head2.equals("1348") || head2.equals("1705");
if (cmcctemp4) {
return result ="中国移动";
}
// 联通前3位
boolean unicomtemp = head1.equals("130") || head1.equals("131")
|| head1.equals("132") || head1.equals("140")
|| head1.equals("145") || head1.equals("146")
|| head1.equals("155") || head1.equals("156")
|| head1.equals("166") || head1.equals("175")
|| head1.equals("176")
|| head1.equals("185") || head1.equals("186");
if (unicomtemp) {
return result = "中国联通";
}
//unicom 4
boolean unicomtemp4 = head1.equals("1709");
if (unicomtemp4) {
return result = "中国联通";
}
// 电信前3位
boolean telecomtemp = head1.equals("133") || head1.equals("149")
|| head1.equals("153") || head1.equals("173")
|| head1.equals("174") || head1.equals("177")
|| head1.equals("180") || head1.equals("181")
|| head1.equals("189") || head1.equals("191")||head1.equals("199");
if (telecomtemp) {
return result = "中国电信";
}
//telecom 4
boolean telecomtemp4 = head1.equals("1700");
if (telecomtemp4) {
return result = "中国电信";
}
return result;
}
public static void main(String[] args) {
new Phonenumber();
}
}
具体的效果图