陌生电话从何来?——编程查清手机号码归属地

编程爱好者

手机的普及给广大老百姓带来了方便,可也带来了些许烦恼:经常发现有陌生电话号码打过来,很多情况下按陌生电话号码回过去,居然是“你中奖了”之类的无聊电话。那么有没有办法确定陌生电话的来源呢?本期为你介绍的《查询手机号码的归属地》能查询移动和联通用户的任意一个合法号码的归属地。

如果你能编写与生活相关的实用小程序,欢迎投稿到pcw-cjy@vip.sina.com,请在邮件主题处注明“程序生活”。投稿请附上源程序,我们将向读者提供下载。

本期为大家介绍的这个生活实用程序名叫《查询手机号码归属地》,它的功能就是查询移动和联通用户的任意一个手机号码的归属地,包括手机地区、城市、区号以及手机类型,你在接到一个陌生电话后,可以使用此软件来查询陌生电话号码的上述信息。此软件采用Delphi7.0编写,其界面如图1。

40-39-g15-1-1.jpg
图1

操作方法:在界面上方的输入框中输入手机号码后直接回车或者点击“查询”按钮即可,如果查询成功则显示这个手机号码注册的地区、城市、区号、手机类型等等信息,如果查询不成功,则返回“未知地区”的消息。

制作思路:

采用Access来建立一个供查询的数据库Data.mdb,并在数据库下建立一张表sj,表的字段包括:号码B、号码E、地区、城市、区号、类型等等,按照国家的规定,各个城市拥有的电话号码段是固定的,比如手机号码为1398165****—1398169****都是四川巴中的移动全球通卡,如图2。我们在表中录入相应的记录为软件查询做好准备。

40-39-g15-1-2.jpg
图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:

40-39-g15-1-0.jpg
图3

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

40-39-g15-1-4.jpg
图4

点击“浏览”按钮,选择应用程序,再点击“添加文件”按钮,选择data.mdb数据库文件,这一步是至关重要的,只有在这里选择了应用程序和数据库文件,程序安装完毕后才能正常运行。然后再一路点击“下一步”按钮,按向导的提示完成操作后你将看到一个提示“你想现在编译新脚本吗?”,点击“是”,然后到指定的文件夹内就能找到Setup.exe了。

以上程序下载网址:http://www.cpcw.com/xz/40shenghuo.rar

这里主要介绍了手机号码归属地的知识,让大家明白了根据一个手机号码的前7位就能查询出此手机号码的城市、地区及手机类型,同时介绍了如何快速制作一个Setup.exe,让大家在程序开发完成后能做成Setup供别人使用。