陌生电话从何来?——编程查清手机号码归属地
编程爱好者
手机的普及给广大老百姓带来了方便,可也带来了些许烦恼:经常发现有陌生电话号码打过来,很多情况下按陌生电话号码回过去,居然是“你中奖了”之类的无聊电话。那么有没有办法确定陌生电话的来源呢?本期为你介绍的《查询手机号码的归属地》能查询移动和联通用户的任意一个合法号码的归属地。
如果你能编写与生活相关的实用小程序,欢迎投稿到pcw-cjy@vip.sina.com,请在邮件主题处注明“程序生活”。投稿请附上源程序,我们将向读者提供下载。
本期为大家介绍的这个生活实用程序名叫《查询手机号码归属地》,它的功能就是查询移动和联通用户的任意一个手机号码的归属地,包括手机地区、城市、区号以及手机类型,你在接到一个陌生电话后,可以使用此软件来查询陌生电话号码的上述信息。此软件采用Delphi7.0编写,其界面如图1。

操作方法:在界面上方的输入框中输入手机号码后直接回车或者点击“查询”按钮即可,如果查询成功则显示这个手机号码注册的地区、城市、区号、手机类型等等信息,如果查询不成功,则返回“未知地区”的消息。
制作思路:
采用Access来建立一个供查询的数据库Data.mdb,并在数据库下建立一张表sj,表的字段包括:号码B、号码E、地区、城市、区号、类型等等,按照国家的规定,各个城市拥有的电话号码段是固定的,比如手机号码为1398165****—1398169****都是四川巴中的移动全球通卡,如图2。我们在表中录入相应的记录为软件查询做好准备。

制作难点之一:ADO与数据库的连接
一般来说,软件发布时需要做成setup.exe,供用户安装使用,这样ADO与Access进行连接就不能在Object Inspector控件属性页中静态设置连接了,如果采用静态连接的方法,用户安装软件后由于数据库的路径原因程序就不能运行,那么ADOConn
ection如何在程序运行后与数据库动态连接呢?
procedure TForm1.FormCreate(Sender: TObject);
begin
if ADOCN.ConnectionString<>'' then
begin
ADOCN.Connected:=False;
ADOCN.ConnectionString:='';
end;
ADOCN.ConnectionString := 'Data Source=' + ExtractFilePath(Application.Exe
Name) + 'Data.Mdb';//这里使用相对路径,在程序安装时把数据库文件加载进去,避免了由于数据库文件的路径问题造成程序无法运行。
ADOCN.Connected:=True;
end;
制作难点之二:查询手机号码的信息
查看一个合法的手机号码的信息其实也就是把手机的前7位取出来,到数据库中进行比较,如果前7位号码在字段“号码B”与字段“号码E”之间,则把这条记录读取出来显示即可。
procedure TForm1.But_SerchClick(Sender: TObject);
var
Mno,InputValue,IsVal:String;
i:integer;
begin
if Length(trim(Edt_Mobile.Text))<>11 then
begin
Mem_Mobile.Clear;
ShowMessage('输入的手机号码位数不对,应该是11位');
Edt_Mobile.SetFocus;
Exit;
end;
//如果数据是粘贴进来的,判断是否是正确的
InputValue:=Trim(Edt_Mobile.Text);
for i:=1 to Length(InputValue) do
begin
IsVal:=Copy(InputValue,1,1);
if not ((IsVal>='0') and (IsVal<='9')) then
begin
Mem_Mobile.Clear;
ShowMessage('对不起,你输入或者粘贴进来的身份证号码无效,请检查');
Edt_Mobile.SetFocus;//光标定位到输入框
Edt_Mobile.SelectAll;//选中输入框的全部字符
Exit;
end;
Delete(InputValue,1,1);
end;
Mno:=copy(Trim(Edt_Mobile.Text),1,7);//取出输入框的值的前7位字符赋给变量Mno
with ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('select * from sj where 号码B<='+Mno +' and 号码E>='+Mno);//从sj表中查询记录,条件是满足Mno的值在字段“号码B”与“号码E”的值之间的记录。
Open;
if RecordCount>0 then//如果存在这条记录就把此记录的“地区”、“城市”、“区号”、“类型”显示出来。
begin
Mem_Mobile.Lines.Clear;
Mem_Mobile.Lines.Add('手机地区 : '+FieldByName('地区').AsString);
Mem_Mobile.Lines.Add('手机城市 : '+FieldByName('城市').AsString);
Mem_Mobile.Lines.Add('手机区号 : '+'0'+FieldByName('区号').AsString);
Mem_Mobile.Lines.Add('手机类型 : '+FieldByName('类型').AsString);
end
else//如果没有这条记录则显示“未知地区”。
begin
Mem_Mobile.Lines.Clear;
Mem_Mobile.Lines.Add('手机地区 : 未知地区');
end;
end;
end;
在输入框Edit中输入后按下回车键的代码:
procedure TForm1.Edt_MobileKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then But_Serch.Click;//回车的键值是13
end;
制作安装程序
使用软件为Inno Setup(下载地址:http://www.skycn.com/soft/3894.html),此软件为中文界面,操作方便。这里简单讲解一下如何制作一个setup.exe。启动Inno.Setup,点击菜单“文件”→“新建”,创建一个向导,在弹出的向导中输入应用程序名,如图3:

然后一路点击“下一步”直到“指定你的应用程序包括的文件部分”,如图4,这个步骤是关键,应正确选择应用程序和数据库文件。

点击“浏览”按钮,选择应用程序,再点击“添加文件”按钮,选择data.mdb数据库文件,这一步是至关重要的,只有在这里选择了应用程序和数据库文件,程序安装完毕后才能正常运行。然后再一路点击“下一步”按钮,按向导的提示完成操作后你将看到一个提示“你想现在编译新脚本吗?”,点击“是”,然后到指定的文件夹内就能找到Setup.exe了。
以上程序下载网址:http://www.cpcw.com/xz/40shenghuo.rar
这里主要介绍了手机号码归属地的知识,让大家明白了根据一个手机号码的前7位就能查询出此手机号码的城市、地区及手机类型,同时介绍了如何快速制作一个Setup.exe,让大家在程序开发完成后能做成Setup供别人使用。