php+纯文本的手机号码归属地查询系统--数据库+源码下载
时间:2008-11-16
来源:互联网
转自:http://www.xiaoxiaoyu.cn/AMP/229.html
演示地址:http://test.xiaoxiaoyu.cn/phone/
一直以来,总想做一个手机号码归属地查询系统,可是老是定不下心来。今天无意中想起,就细细的做了,前前后后,3个小时吧(包括数据库转换等等),哈哈。
首先,我这个查询系统不依靠mysql之类的大型数据库,而是依靠文本,因为,一般一个手机号码,在查询系统中起决定作用的就是前7位,那就是说理论上说,需要保存的记录有:10的7次方
但我们还可以分析:
13X段(包括130~139),总计10*104=10的5次方,十万条
15X段(150,153,156,157,158,159)总计6*10的4次方=60000,6万条
目前,我们理论上要有16W数据,这数据量,不是一笔小数目,你想使用数据库我不拦你反正我没打算用。
我使用的是纯文本的文件作为数据库,将每一个号码的前三位作为一个文件名,如130,130文件存的是所有130开头的号段资料,共有1W条,一般文件比较小,不会超过300K,Php的文件操作,可以在很短的时间内获取。因此,我共需要16个文件作为数据库,从130~139,还有15X的。
好了,数据库设计好了,然后是流程,首先要看看手机号码有什么特征:
1.必须全部是数字
2.大小为11位
3.开头三个数必须在13x和15X之间。--(目前,说不定,未来还有12X或是19X系列)
第一个,使用正则,但因为php下的正则不支持/g(全局),所以使用循环判断,如果有非数字,返回一个error
第二个,用strlen就行了
第三个,用substr就行--(最后我没使用,为啥,往后看)
第三个问题中,我有一个设想,利用遍历子文件的方式得到130~139 15X的文件名,这些就是目前支持的前缀,然后匹配就行了
不成熟的函数:
手机号码的归属地中的数据库中的数据,类似这种格式:
130文件中:
0000=北京联通GSM卡
表示:130 0000 开头的为北京联通的GSM卡。
因为数据库可能有点旧,而我也只是做个演示,所以我没有更新数据库,如果以后有可能的话,我会更新手机号码的数据库的。要得人,要关注我的BLog喽。
源码+数据库下载:
phone1.zip (169.47 KB)
演示地址:http://test.xiaoxiaoyu.cn/phone/
一直以来,总想做一个手机号码归属地查询系统,可是老是定不下心来。今天无意中想起,就细细的做了,前前后后,3个小时吧(包括数据库转换等等),哈哈。
首先,我这个查询系统不依靠mysql之类的大型数据库,而是依靠文本,因为,一般一个手机号码,在查询系统中起决定作用的就是前7位,那就是说理论上说,需要保存的记录有:10的7次方
但我们还可以分析:
13X段(包括130~139),总计10*104=10的5次方,十万条
15X段(150,153,156,157,158,159)总计6*10的4次方=60000,6万条
目前,我们理论上要有16W数据,这数据量,不是一笔小数目,你想使用数据库我不拦你反正我没打算用。
我使用的是纯文本的文件作为数据库,将每一个号码的前三位作为一个文件名,如130,130文件存的是所有130开头的号段资料,共有1W条,一般文件比较小,不会超过300K,Php的文件操作,可以在很短的时间内获取。因此,我共需要16个文件作为数据库,从130~139,还有15X的。
好了,数据库设计好了,然后是流程,首先要看看手机号码有什么特征:
1.必须全部是数字
2.大小为11位
3.开头三个数必须在13x和15X之间。--(目前,说不定,未来还有12X或是19X系列)
第一个,使用正则,但因为php下的正则不支持/g(全局),所以使用循环判断,如果有非数字,返回一个error
第二个,用strlen就行了
第三个,用substr就行--(最后我没使用,为啥,往后看)
第三个问题中,我有一个设想,利用遍历子文件的方式得到130~139 15X的文件名,这些就是目前支持的前缀,然后匹配就行了
不成熟的函数:
- /*
- Coding By XiaoXiaoYu
- Blog:www.xiaoxiaoyu.cn
- 2008.11.15
- */
- function getphone($phone){
-
$dbpath="datas/"; -
$len=strlen($phone); -
if ( $len !=11 ){ -
return
"手机号码只支持11位"; - }
-
$par="[0-9]"; -
for ($i=0;$i<$len;$i++){ -
if(!ereg($par,substr($phone,$i,1) ) ){ -
return
"手机号码只能为数字"; - }
- }
-
$sunum=scandir($dbpath); //得到支持的手机号码前缀 -
array_splice($sunum,0,1); //把当前目录取消 -
array_splice($sunum,0,1); //把上一级目录去掉 -
$sub=substr($phone,0,3); //取得该号码的前三位 -
if (in_array($sub,$sunum) ){ -
$num=substr($phone,3,4); -
$search=file($dbpath.$sub); -
$result=str_replace($num."=","",$search[$num]); //处理数据 -
return (strlen($result)>1)?$result:"0"; - }else{
-
return
"暂不支持$sub"; - }
- }
手机号码的归属地中的数据库中的数据,类似这种格式:
130文件中:
0000=北京联通GSM卡
表示:130 0000 开头的为北京联通的GSM卡。
因为数据库可能有点旧,而我也只是做个演示,所以我没有更新数据库,如果以后有可能的话,我会更新手机号码的数据库的。要得人,要关注我的BLog喽。
源码+数据库下载:

作者: syb328 发布时间: 2008-11-16


支持~嘎嘎~
作者: 0hudu 发布时间: 2008-11-16
好东西,顶一下
作者: MoHock 发布时间: 2008-11-17
好东西,支持
作者: cnITonline.com 发布时间: 2008-11-17
好东西,强烈支持,学习学习
作者: feng8899 发布时间: 2008-11-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28