手机号码归属地查询这个概念大家都不陌生吧!像我们在百度搜索框中输入一个正确的手机号码,点击搜索,就会显示这个手机号码的归属地和卡类型,非常方便。今天要为大家说的就是利用PHP+MYSQL的方法来实现手机号码归属地的查询。网上也有很多方法,大多是通过一些提供在线接口的网站或是PHP+纯文本的方法来实现的。
如果只是查询单个手机号码,那推荐你用提供国内手机号码段归属地数据的网站接口来做,简单实现,也不浪费你服务器资源。比如MobileCodeWS就是不错的选择。
如果是同时或是循环查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库。正常情况下,只是满足一般查询的话,你不需要去购买专业版的手机号码数据库,增加无谓成本。我免费为你提供一个ACCESS数据库,包含17万多条数据,常用的130-139、150-159以及180-189开头手机号码段都在其中,你可以借助数据库工具轻松地将它转换成MYSQL或其它版本数据库。
附:最新手机号码数据库免费下载
进入正题,这两天,应老板要求,需要在PHP+MYSQL开发的一个管理系统中实现以下功能:
1)显示用户的电话号码(手机号或座机号)归属地,便于回访;
2)后台做一个手机号码段添加的功能,便于更新手机号码库。
PHP+MYSQL手机号码归属地查询实现方法
通过上面的介绍,我们已经有了自己的MYSQL数据表。这个表结构很简单:ID(序号),code(区号),num(手机号码段),cardtype(手机卡类型),city(手机号码归属地)。注意,这个表存储数据量很大,应当根据你的sql查询语句,建立合适的索引字段,以提高查询效率。
1)获取手机号码归属地,我们只需要通过判断手机号码段归属地即可。主要通过以下函数实现,其中GetAlabNum、cn_substr、str_replace都是字符串操作函数,$dsql是数据库操作类。
function GetTelphone($tel) {global $city,$dsql; if(isset($tel)) $tel = GetAlabNum(trim($tel));//GetAlabNum函数用于替换全角数字,将可能存在的非法手机号码转换为数字;trim去除多余空格。 else return false; if(strlen($tel) < 7) return false; $tel = cn_substr($tel, 11);//先截取11个字符,防止是多个手机号码 //if(!is_numeric($tel)) return false; if(cn_substr($tel, 1) == "0")//判断手机号码是否以0开头,这种情况可能会是座机号以0开头 { if(cn_substr($tel, 2) == "01" || cn_substr($tel, 2) == "02") $tel = cn_substr($tel, 3);//3位区号 else $tel = cn_substr($tel, 4); $row = $dsql->GetOne(" Select code,city as dd from `#@__tel` where code='$tel' group by code "); } else { $tel = cn_substr($tel, 7); $row = $dsql->GetOne(" Select num,city as dd from `#@__tel` where num='$tel' "); } $city = $row['dd']; if($city) { $city = str_replace("省", "-", $city); $city = str_replace("市", "", $city); $city = "<br /><font color=\"green\">[".$city."]</font>"; return $city; } }
2)添加新的手机号码段功能
这个功能就很简单了吧,只是一个简单的表单提交功能,PHP学习最基本的留言簿就是这么做的,随便DOWN一个来参考下即可,就不详细说明了。
以上就是PHP+MYSQL实现手机号码归属地查询的详细办法,有什么不对的地方欢迎补充、交流。