⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mobilesearcher.java

📁 java写的全国移动联通的手机归属地查询程序
💻 JAVA
字号:
package net.xdevelop.mobile;

import java.io.*;
import net.xdevelop.util.*;
/**
 * <p>Title: 手机所属地查询工具类</p>
 * <p>Description: 可通过手机号码查询手机所属省/市/SIM卡类型信息</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: www.xdevelop.net</p>
 * @author starboy
 * @version 1.0
 */

public class MobileSearcher {
    // 初始化载入数据
    private static boolean loaded = false;
    private static boolean loadError = false;
    private static String loadErrorInfo;
    private boolean bError = false;
    private String error;
    static {
        load();
    }
    private static MobileData mobile; // 手机归属数据

    private int no = 100000; // 手机号码序号,即13(xxxxx)中的部分
    private String mobileNo;

    /**
     * 待查询的手机号码是字符串类型的构造函数
     * @param mobileNo 手机号码: 须大于等于7位且不超过11位, 超过7位的部分将被忽略, 但超出11位的将被认为是错误的号码
     */
    public MobileSearcher(String mobileNo) {
        init(mobileNo);
    }

    /**
     * 待查询的手机号码是long数字类型的构造函数
     * @param mobileNo 须大于等于7位且不超过11位, 超过7位的部分将被忽略, 但超出11位的将被认为是错误的号码
     */
    public MobileSearcher(long mobileNo) {
        init(Long.toString(mobileNo));
    }

    /**
     * 初始化查询
     * @param mobileNo 手机号码
     */
    private void init(String mobileNo) {
        this.mobileNo = mobileNo;
        // 检查
        // 1. 是否非NULL
        // 2. 长度是否7<=len<=11, 介于7于11间的取7位
        // 3. 是否13开头
        if (mobileNo == null || mobileNo.equals("")) {
            no = 100000; // 手机数据中保留的空值位置序号
            bError = true;
            error = "空的手机号码";
            return;
        }
        int len = mobileNo.length();
        if (len < 7 || len > 11) {
            no = 100000;
            bError = true;
            error = "手机号码位数不对";
            return;
        }
        if (!mobileNo.startsWith("13")) {
            no = 100000;
            bError = true;
            error = "不是正确的手机号码";
            return;
        }
        mobileNo = mobileNo.substring(2, 7);
        try {
            no = Integer.parseInt(mobileNo);
        }
        catch (Exception e) {
            bError = true;
            error = "不是正确的手机号码";
            no = 100000;
        }
    }

    /**
     * 取得手机号码所属省或直辖市
     * @return 手机号码所属省或直辖市,若无数据或手机号码不合法,将返回空串
     */
    public String getProvince() {
        if (loadError) {
            return "";
        }
        return mobile.province[no];
    }

    /**
     * 取得手机号码所属城市
     * @return 手机号码所属城市,若无数据或手机号码不合法,将返回空串
     */
    public String getCity() {
        if (loadError) {
            return "";
        }
        return mobile.city[no];
    }

    /**
     * 取得手机号码所属的卡类型
     * @return 手机号码所属的卡类型,若无数据或手机号码不合法,将返回空串
     */
    public String getCard() {
        if (loadError) {
            return "";
        }
        return mobile.card[no];
    }

    /**
     * 取得查询的手机号码
     * @return 获得该查询的手机号码
     */
    public String getMobileNo() {
        return this.mobileNo;
    }

    /**
     * 返回错误信息,若查询时出现错误,可通过此得到错误信息,主要供调试程序用.
     * 通常的错误信息是手机号码不正确, 一般可以忽略不做任何检查,
     * 但如果你发现总是无法获得期望的结果, 则你需要通过它查询错误原因.
     * @return 错误信息
     */
    public String getError() {
        if (loadError) return loadErrorInfo;
        else if (bError) {
            return error;
        } else {
            return "";
        }
    }

    /**
     * 检查查询过程中是否出现意外错误,如果你发现查询总是未能获得期望的数据时,请调用此方法检查
     * @return 若出错, 返回true, 否则返回false
     */
    public boolean isError() {
        return (loadError || bError);
    }

    /**
     * 载入数据类
     */
    private synchronized static void load() {
        if (!loaded) {
            mobile = new MobileLoader().loadMobileData();
            if (mobile == null) {
                loadError = true;
                loadErrorInfo = "Can't load mobile data or the data was corrupted!";
            }
            loaded = true;
        }
    }
}

/**
 * 数据装入类
 */
class MobileLoader {
    /**
     * 装入数据类,lazy initialization
     */
    public MobileData loadMobileData() {
        MobileData mobile;
        DataInputStream in = null;
        try {
            InputStream inStream = getClass().getResourceAsStream("/net/xdevelop/mobile/mobile.dat");
            in = new DataInputStream(new BufferedInputStream(inStream));
            byte[] obj = new byte[3581541];
            in.read(obj);
            mobile = (MobileData)ByteArrayToObject(obj);
            return mobile;
        }
        catch (Exception e) {
            return null;
        }
    }

    /**
     * 将对象字节数组还原为object
     * @param objArray 对象的字节数组
     * @return 返回还原的对象
     */
    private static Object ByteArrayToObject(byte[] objArray) throws Exception {
        try {
            InputStream in = new ByteArrayInputStream(objArray);
            ObjectInputStream objectIn = new ObjectInputStream(in);
            Object object = objectIn.readObject();
            return object;
        }
        catch (Exception e) {
            throw e;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -