“最新”手机号码归属地库制作
目的
通过本文你可以自己动手制作最新的号码归属地库
所需技术
ü 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搞滴手机号码源程序,才想起做最新库的事,反正闲着没事做
“最新”手机号码归属地库制作相关推荐
- 验证手机号码归属地_最新确认:手机号码归属地不能取消
在连续6年时间的"提速降费"大举措下,我们国家的通信资费政策结构相比以往已经有了翻天覆地的变化,用简单的一句话描述,就是价格越来越实惠.服务越来越便捷.比如漫游费的取消,直接让我们 ...
- 个人永久性免费-Excel催化剂功能第99波-手机号码归属地批量查询
高潮过往趋于平静,送上简单的手机号码归属地查询,因接口有数量限制,仅能满足少量数据需求,如有大规模数据却又想免费获得,这就成为无解了,数据有价,且用且珍惜. 业务使用场景 除了日常自带的手机各种管家为 ...
- php 手机号归属地 dat,GitHub - china-qd/phonedata: 手机号码归属地信息库、手机号归属地查询 phone.dat 最后更新:2020年04月...
手机号码归属地信息库.手机号归属地查询 这可能是github上能找到的最新最全的中国境内手机号归属地信息库 基于GO语言实现,使用二分查找法. 归属地信息库文件大小:4,040,893 字节 归属地信 ...
- php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)_PHP教程
文章来介绍一下关于手机号码归属地实现方法,我们可以利用api接口与mysql+php来实例有需要的同学看看. 首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库. ...
- 苹果手机来电归属地_手机号码归属地能否取消?工信部回复!
阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到最新文章了.每天都有分享.完全是免费订阅,请放心关注.声明:图文来源于网络,版 ...
- 国内手机号码归属地查询WEB服务
http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx 点击打开链接 MobileCodeWS WebXml.com.cn 国内手机号码归属地查询 ...
- 手机号码归属地服务[转载]
服务地址: http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx WebXml.com.cn 国内手机号码归属地查询WEB服务,提 ...
- php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)
首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库.正常情况下,只是满足一般查询的话,你不需要去购买专业版的手机号码数据库,增加无谓成本.我免费为你提供一个ACC ...
- php判断号码归属,PHP手机号码归属地查询代码(API接口/mysql)
首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库.正常情况下,只是满足一般查询的话,你不需要去购买专业版的手机号码数据库,增加无谓成本.我免费为你提供一个ACC ...
- PHP+MYSQL实现手机号码归属地查询…
手机号码归属地查询这个概念大家都不陌生吧!像我们在百度搜索框中输入一个正确的手机号码,点击搜索,就会显示这个手机号码的归属地和卡类型,非常方便.今天要为大家说的就是利用PHP+MYSQL的方法来实现手 ...
最新文章
- 在.NET中使用iTextSharp创建/读取PDF报告: Part I [翻译]
- mathtype公式如何在word中对齐
- [Leedcode][JAVA][第210 题][课程表 II][拓扑排序][BFS][DFS][有向图]
- 5G关键技术:大规模多天线技术现状及研究点介绍
- 【BZOJ4710】[JSOI2011]分特产(容斥)
- java 显示锁_Java 实现一个自己的显式锁Lock(有超时功能)
- linux切大文件为小文件,linux系统下分割大文件的方法
- HTTP头域列表与解释 之 request篇
- 【CODEVS1191】数轴染色
- 仙人掌(cactus)
- [数据库事务与锁]详解四: 数据库的锁机制
- lua luarocks luacheck linux安装
- 戴维斯计算机科学值得读吗,2018加州大学戴维斯分校计算机科学专业基本信息详细解读...
- Typora基本使用Markdown基本语法:精炼且详细
- Unable to instantiate Action错误的解决
- 2021GMV目标10000亿,“好学生”抖音认真做电商
- chrome中了flash过期的解决方法
- JSP对接国际验证码接口DEMO示例
- RUA!ERROR!
- 遥感IDL二次开发(辐射定标)