C# 实现手机号码的归属地查询的功能,在winform中可以采用两种方式来实现。
一种是用WEB控件来显示该网页,和c# 天气预报查询实现原理一样。
一种就是采用本地数据库的方式来实现,即截取号码段与数据库中相应字段值比较,Select 出对应的信息。
本实例的效果图如下所示:
C#手机号码归属地查询的源码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.sqlite;
using System.Text.RegularExpressions;
using System.IO;
namespace 手机号码查询
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string phoneNum = "";//存储完整手机号码
string tel = "";//存储手机号码的前缀
private void tsbtnLocal_Click(object sender, EventArgs e)
{
if (!File.Exists("data"))//检查数据库是否存在
{
MessageBox.Show("数据库文件丢失!请找回!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
phoneNum = tstxtTel.Text.Trim();//完整手机号码
tel = phoneNum.Substring(0, 3);//取手机号码前面三位判断
if (checkTel())
{
phoneNum = phoneNum.Substring(0, 7);//取手机号码前面七位进行查询
string sql = "select * from '" + tel + "' where numberrange='" + phoneNum + "' limit 0,1";
SQLiteConnection con = null;
SQLiteCommand cmd = null;
SQLiteDataReader dr = null;
try
{
con = new SQLiteConnection("Data Source="+Application .StartupPath +"data");
cmd = new SQLiteCommand(sql, con);
con.Open();
dr = cmd.ExecuteReader();
if (dr.HasRows)//如果存在此记录
{
txtLocaltion.Text = dr.GetValue(1).ToString();
txtType.Text = dr.GetValue(2).ToString();
txtZipCode.Text = dr.GetValue(3).ToString();
txtCityNum.Text = dr.GetValue(4).ToString();
}
else
{
MessageBox.Show("暂时未查找到此号码的记录!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MessageBox.Show("暂时未查找到此号码的记录!"+ex.Message , "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
dr.Close();
dr.Dispose();
con.Close();
con.Dispose();
tstxtTel.Focus();
}
}
}
//检验输入手机号码的合法性和正确性
private bool checkTel()
{
if (phoneNum == null)//如果号码为空
{
MessageBox.Show("号码不能为空!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information );
tstxtTel.Focus();
return false;
}
Match num = Regex.Match(phoneNum , "[0-9]+");
if (!num.Success)//如果号码不为数字
{
MessageBox.Show("手机号码输入错误!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
tstxtTel.Focus();
return false;
}
if (phoneNum.Length < 7)//如果号码长度小于七位
{
MessageBox.Show("手机号码必须要大于7位!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
tstxtTel.Focus();
return false;
}
if (phoneNum.Length > 11)//如果号码长度大于十一位
{
MessageBox.Show("手机号码必须要小于11位!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
tstxtTel.Focus();
return false;
}
if (tel != "130" && tel != "131" && tel != "132" && tel != "133" && tel != "134" &&
tel != "135" && tel != "136" && tel != "137" && tel != "138" && tel != "139" &&
tel != "150" && tel != "151" && tel != "152" && tel != "153" && tel != "156" &&
tel != "158" && tel != "159")//如果不是手机号码
{
MessageBox.Show("手机号码输入错误", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
return true;
}
private void tstxtTel_KeyPress(object sender, KeyPressEventArgs e)
{
// 特殊键, 不处理
if ((int)e.KeyChar <= 31)
{
return;
}
// 非数字键, 放弃该输入
if (!char.IsDigit(e.KeyChar))
{
e.Handled = true;
return;
}
}
private void tsbtnInternet_Click(object sender, EventArgs e)
{
phoneNum = tstxtTel.Text.Trim();
string url = @"http://api.showji.com/Locating/query.aspx?m=" + phoneNum ;
wbMain.Navigate(url);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
MessageBox.Show("作者:刘典武 (游龙工作室)" + "rn" + "网址:http://www.xxxxxx.com", "呵呵", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.ExitThread();
}
private void Form1_Load(object sender, EventArgs e)
{
//tstxtTel.Focus();//这样初始化焦点不行
}
private void Form1_Shown(object sender, EventArgs e)
{
tstxtTel.Focus();//这样才正确
}
}
}