目的

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

所需技术

ü         html

ü         js、ajax

ü         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. 验证手机号码归属地_最新确认:手机号码归属地不能取消

    在连续6年时间的"提速降费"大举措下,我们国家的通信资费政策结构相比以往已经有了翻天覆地的变化,用简单的一句话描述,就是价格越来越实惠.服务越来越便捷.比如漫游费的取消,直接让我们 ...

  2. 个人永久性免费-Excel催化剂功能第99波-手机号码归属地批量查询

    高潮过往趋于平静,送上简单的手机号码归属地查询,因接口有数量限制,仅能满足少量数据需求,如有大规模数据却又想免费获得,这就成为无解了,数据有价,且用且珍惜. 业务使用场景 除了日常自带的手机各种管家为 ...

  3. php 手机号归属地 dat,GitHub - china-qd/phonedata: 手机号码归属地信息库、手机号归属地查询 phone.dat 最后更新:2020年04月...

    手机号码归属地信息库.手机号归属地查询 这可能是github上能找到的最新最全的中国境内手机号归属地信息库 基于GO语言实现,使用二分查找法. 归属地信息库文件大小:4,040,893 字节 归属地信 ...

  4. php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)_PHP教程

    文章来介绍一下关于手机号码归属地实现方法,我们可以利用api接口与mysql+php来实例有需要的同学看看. 首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库. ...

  5. 苹果手机来电归属地_手机号码归属地能否取消?工信部回复!

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到最新文章了.每天都有分享.完全是免费订阅,请放心关注.声明:图文来源于网络,版 ...

  6. 国内手机号码归属地查询WEB服务

    http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx 点击打开链接 MobileCodeWS WebXml.com.cn 国内手机号码归属地查询 ...

  7. 手机号码归属地服务[转载]

    服务地址: http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx WebXml.com.cn 国内手机号码归属地查询WEB服务,提 ...

  8. php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)

    首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库.正常情况下,只是满足一般查询的话,你不需要去购买专业版的手机号码数据库,增加无谓成本.我免费为你提供一个ACC ...

  9. php判断号码归属,PHP手机号码归属地查询代码(API接口/mysql)

    首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库.正常情况下,只是满足一般查询的话,你不需要去购买专业版的手机号码数据库,增加无谓成本.我免费为你提供一个ACC ...

  10. PHP+MYSQL实现手机号码归属地查询…

    手机号码归属地查询这个概念大家都不陌生吧!像我们在百度搜索框中输入一个正确的手机号码,点击搜索,就会显示这个手机号码的归属地和卡类型,非常方便.今天要为大家说的就是利用PHP+MYSQL的方法来实现手 ...

最新文章

  1. 在.NET中使用iTextSharp创建/读取PDF报告: Part I [翻译]
  2. mathtype公式如何在word中对齐
  3. [Leedcode][JAVA][第210 题][课程表 II][拓扑排序][BFS][DFS][有向图]
  4. 5G关键技术:大规模多天线技术现状及研究点介绍
  5. 【BZOJ4710】[JSOI2011]分特产(容斥)
  6. java 显示锁_Java 实现一个自己的显式锁Lock(有超时功能)
  7. linux切大文件为小文件,linux系统下分割大文件的方法
  8. HTTP头域列表与解释 之 request篇
  9. 【CODEVS1191】数轴染色
  10. 仙人掌(cactus)
  11. [数据库事务与锁]详解四: 数据库的锁机制
  12. lua luarocks luacheck linux安装
  13. 戴维斯计算机科学值得读吗,2018加州大学戴维斯分校计算机科学专业基本信息详细解读...
  14. Typora基本使用Markdown基本语法:精炼且详细
  15. Unable to instantiate Action错误的解决
  16. 2021GMV目标10000亿,“好学生”抖音认真做电商
  17. chrome中了flash过期的解决方法
  18. JSP对接国际验证码接口DEMO示例
  19. RUA!ERROR!
  20. 遥感IDL二次开发(辐射定标)

热门文章

  1. Linux中Qt环境编译链接依赖opencv库时报错
  2. 原始点,姜治百病理论,害人不浅
  3. 高中数学:数列求和的8种常用方法(最全)
  4. windows下安装you-get的简要记录
  5. 最新WingIDE注册破解方法
  6. 【转载】树莓派 Raspberry Pi Pico windows7 串口驱动
  7. C#设置文件夹权限,处理为Everyone所有权限
  8. 一个简单的BitTorrent客户端实现(三):同步事件分离器
  9. 数组添加/扩容和数组缩减
  10. OCCT示例学习笔记1--Viewer2d项目