“最新”手机号码归属地库制作

 

目的

通过本文你可以自己动手制作最新的号码归属地库

所需技术

ü         html

ü         jsajax

ü         php(jsp)

ü         mysq

基本思路

利用http://api.showji.com提供的查询接口,前台页面(querymobile.html)不断查询获归属地数据,再提交到后台处理页面(deal.php),把数据保存至数据库(phonenumber_db)(tb_number)

实现步骤

1.       前台html页面

一个开始号码输入框、一个【开始查询】按钮,还有一些显示查询结果的span标签,很简单。如下图:

部分源码如下:

…………

 起始号码(前七位):<input type="text" name="m" value="1300000" " id="m" />

<input type="button" value="开始查询" id="btnQuery" οnclick="btnQuery(this)" />

 

<ul>

    <li>所查号码:<span id="txtMobile"></span></li>

    <li>归属省份:<span id="txtProvince"></span></li>

    <li>归属城市:<span id="txtCity"></span></li>

    <li>城市区号:<span id="txtAreaCode"></span></li>

    <li>城市邮编:<span id="txtPostCode"></span></li>

    <li>卡 类 型:<span id="txtCard"></span></li>

</ul>

…………

 

2.       前台js

js在这里很重要,代码较多,但都是基本的东西,有注释,应该好理解

/** **********全局变量定义************** */

// 开始号码(注:前七位手机号码即可)

var startNumber = 1300000;

// 是否停止

var isFinish = false;

/** ************************ */

// 根据元素id获取元素

// lxq 2011/09/11

/** ************************ */

function $(objID) {

    return document.getElementById(objID);

}

 

/** ************************ */

// 号码查询后,执行的回调函数

// lxq 2011/09/11

/** ************************ */

function querycallback(obj) {

    // 检查是否成功获取手机归属信息

    if (obj["QueryResult"] != "True") {

       // 显示查询到的归属信息

       $("txtMobile").innerHTML = '<bold>暂无无数据</bold>';

       $("txtProvince").innerHTML = '';

       $("txtMobile").innerHTML = '';

       $("txtCity").innerHTML = '';

       $("txtAreaCode").innerHTML = '';

       $("txtPostCode").innerHTML = '';

       $("txtCard").innerHTML = '';

    } else {

       // 显示查询到的归属信息

       $("txtMobile").innerHTML = obj["Mobile"];

       $("txtProvince").innerHTML = obj["Province"];

       $("txtCity").innerHTML = obj["City"];

       $("txtAreaCode").innerHTML = obj["AreaCode"];

       $("txtPostCode").innerHTML = obj["PostCode"];

       $("txtCard").innerHTML = obj["Corp"] + obj["Card"];

       // alert(obj.toJSONString());

       // 将查询结果返回后台,交与jsp(或php处理

       postDataToBack(obj);

 

    }

 

}

 

/** ************************ */

// 查询号码函数,执行的回调函数

// lxq 2011/09/11

/** ************************ */

function query() {

    // 若有停止查询,应跳出查询程序,不再继续执行

    if (isFinish) {

       return;

    }

 

    // 读取归属数据,成功后调用 querycallback 函数

    var oHead = document.getElementsByTagName('head')[0];

    var oTar = $("remotejs");

    // 存在此js节点应删除,防止累计生成重复js代码

    if (oTar)

       oHead.removeChild(oTar);

 

    var oScript = document.createElement('script');

    oScript.type = "text/javascript";

    oScript.id = "remotejs";

    oScript.src = "http://api.showji.com/Locating/default.aspx?m="

           + escape(startNumber) + "&output=json&callback=querycallback";

    oHead.appendChild(oScript);

 

    startNumber++;

    $("m").value = startNumber;

}

 

/** ************************ */

// 查询按钮事件

// lxq 2011/09/11

/** ************************ */

function btnQuery(btn) {

    // 获取号码,进行验证

    var mobile = $("m").value;

    if (mobile.length == 1) {

       alert('请输入号码');

       return;

    }

 

    if (btn.value == '开始查询') {

       var number = $("m").value;

       if (number != '') {

           try {

              startNumber = parseInt(number);

           } catch (err) {

              $("m").value = startNumber;

           }

           ;

       } else {

           $("m").value = startNumber;

       }

 

       btn.value = '停止查询';

       isFinish = false;

       query();

    } else if (btn.value == '停止查询') {

       btn.value = '继续查询';

       isFinish = true;

    } else if (btn.value == '继续查询') {

       btn.value = '停止查询';

       isFinish = false;

       query();

    }

};

 

/** ************************ */

// 提交数据到后台处理页面deal.php

// lxq 2011/09/11

/** ************************ */

var xmlHttp;

function postDataToBack(data) {

    xmlHttp = null;

    var url = "http://localhost/test/deal.php";

    if (window.XMLHttpRequest) {// IE7, Firefox, Opera

       xmlHttp = new XMLHttpRequest();

    } else if (window.ActiveXObject) {// IE6, IE5

       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

    }

    if (xmlHttp != null) {

       xmlHttp.onreadystatechange = function() {

           // 若后台处理完,继续查询下一个号码

           if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {

              // alert(xmlHttp.responseText);

              query();

           }

       };

 

       xmlHttp.open("POST", url, true);

       xmlHttp.setRequestHeader("Content-Type",

              "application/x-www-form-urlencoded");

       var urlparams = "Mobile=" + data["Mobile"] + "&Province="

              + data["Province"] + "&City=" + data["City"] + "&AreaCode="

              + data["AreaCode"] + "&PostCode=" + data["PostCode"] + "&Corp="

              + data["Corp"] + "&Card=" + data["Card"];

 

       urlparams = encodeURI(urlparams);

       xmlHttp.send(urlparams);

    }

3.       后台处理页面

后台的处理思路是:先查询是否存在该号码信息,如存在则不再录入该号码信息,其他到没什么了,就是简单的sql操作了。

<?php

    header("Content-type: text/html; charset=utf-8");

    //获取前台提交数据

    $Mobile = $_POST["Mobile"];

    $Province =  urldecode($_POST["Province"]);

    $City = urldecode($_POST["City"]);

    $AreaCode = $_POST["AreaCode"];

    $PostCode = $_POST["PostCode"];

    $Corp = urldecode($_POST["Corp"]);

    $Card = urldecode($_POST["Card"]);

   

    $con = mysql_connect("localhost", "root", "root");

    if (!$con)

    {

       error_log("创建mysql连接失败:". mysql_error(),3,"log.txt");

       die('Could not connect: ' . mysql_error());

    }

    mysql_query("set names utf8",$con);

    $db_selected = mysql_select_db("phonenumber_db",$con);

    $sql="SELECT * FROM tb_number WHERE Mobile = '".$Mobile."'";

    $result = mysql_query($sql,$con);

    $row = mysql_fetch_row($result);

   

    //查询不到此号码时,才进行录入该号码

    if($row == false){

       $sql ="INSERT INTO `phonenumber_db`.`tb_number` (`IID`, `Mobile`, `Province`, `City`, `AreaCode`, `PostCode`, `Corp`, `Card`) VALUES"

       ." (NULL, '".$Mobile."', '".$Province."', '".$City."', '".$AreaCode."', '".$PostCode."', '".$Corp."', '".$Card."');";

       $isSuccess = mysql_query($sql,$con);

      

       if($isSuccess == false){

           //echo '插入数据失败....';

           error_log("插入数据失败:".error_get_last(),3,"./log.txt");

       }

    }

   

    //关闭连接

    mysql_close($con);

 

?>

4.       数据库脚本

忘了说了,前台、js、后台、数据库都应该使用utf-8编码,防止出现乱码。

一个数据库一张表,这这些了

tb_number

字段

类型

Null

默认

注释

IID

bigint(20)

 

 

内部标识 

Mobile

varchar(7)

 

 

号码 

Province

varchar(50)

 

 

省份 

City

varchar(50)

 

 

地市 

AreaCode

varchar(25)

 

 

区域码 

PostCode

varchar(25)

 

 

邮政编码 

Corp

varchar(25)

 

 

运营商 

Card

varchar(25)

 

 

品牌 

 

总结

以前在网上看到有人这样搞过,记不清出,手机号码归属地的数据库网上也有些现成的数据库,不是最新的,好像就10~20万条记录吧。网友也要那个j2me搞滴手机号码源程序,才想起做最新库的事,反正闲着没事做

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值