编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> C# -> 通过手机号定位归属地 -> 正文阅读

[C#]通过手机号定位归属地

  工作中,很多地方,都存在只知道手机号,同时也想知道这个手机号的归属地的情况。
  本功能,即可实现这个要求。同时,可在此基础上做调整,实现其它功能,如制作一个属于自己的手机号段归属库等。。。
  实现思路:通过网上提供的免费查询接口,取得返回信息,并对返回信息进行解析处理,获取自己需要的数据。
  使用控件:LitJson.dll (LitJson.dll下载  或到网上搜索)
  代码如下:

        /// <summary>  
        /// 获取url的返回值  
        /// </summary>  
        /// <param name="url">eg:http://m.weather.com.cn/atad/101010100.html </param>  
        private string RequestGetInfo(string url)
        {
            string strBuff = "";
            Uri httpURL = new Uri(url);
            // HttpWebRequest类继承于WebRequest,并没有自己的构造函数,需通过WebRequest的Creat方法 建立,并进行强制的类型转换   
            HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(httpURL);
            // 通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换   
            HttpWebResponse httpResp = (HttpWebResponse)httpReq.GetResponse();
            // GetResponseStream()方法获取HTTP响应的数据流,并尝试取得URL中所指定的网页内容   
            // 若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生ProtoclViolationException错 误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理   
            Stream respStream = httpResp.GetResponseStream();
            // 返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以   
            // StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8)   
            StreamReader respStreamReader = new StreamReader(respStream, Encoding.UTF8);
            strBuff = respStreamReader.ReadToEnd();
            return strBuff;
        }

  调用代码:

            string txtPhone = this.txtMobile.Text; // 输入的手机号码
            string url = "http://v.showji.com/Locating/showji.com2016234999234.aspx?output=json&callback=querycallback&timestamp=" + GetNowTimestamp() + "&m=" + txtPhone;

            string get = RequestGetInfo(url);
            get = get.Substring(get.IndexOf('{'));
            get = get.Substring(0, get.IndexOf('}') + 1);
            JsonData jd = JsonMapper.ToObject(get);

            string result = jd["QueryResult"].ToString();
            string city = jd["City"].ToString(); // 归属城市
            MessageBox.Show(get);

  其中:GetNowTimestamp()取的时间戳,以保证值不同。

        private string GetNowTimestamp()
        {
            TimeSpan span = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
            return span.TotalSeconds.ToString();
        }

  
  如输入手机号:13800138000(实际上只需要手机号的前7位即可),get值返回字符串: "{"Mobile":"13800138000","QueryResult":"True","TO":"中国移动","Corp":"中国移动","Province":"北京","City":"北京","AreaCode":"010","PostCode":"100000","VNO":"","Card":""}。
  Mobile为手机号(段)
  QueryResult为查询结果,=True表示查询成功。=False为查询失败。
  Corp为号码所属公司
  Province为所属省份
  City为所属城市
  AreadCode为所在地的电话区号
  PostCode为所在地邮编
  其它信息未知。
   
  顺带说一下使用LitJson使用过程中的问题,就是它将JSON对象转换成字符串时,会将中文自动转成Unicode编码,保存到文件上时,看起不够直观。所以,提供一个Unicode与正常字符串之间的转码处理函数:

        /// <summary>  
        /// <summary>  
        /// 字符串转Unicode  
        /// </summary>  
        /// <param name="source">源字符串</param>  
        /// <returns>Unicode编码后的字符串</returns>  
        public static string String2Unicode(string source)
        {
            byte[] bytes = Encoding.Unicode.GetBytes(source);
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < bytes.Length; i += 2)
            {
                stringBuilder.AppendFormat("\\u{0}{1}", bytes[i + 1].ToString("x").PadLeft(2, '0'), bytes[i].ToString("x").PadLeft(2, '0'));
            }
            return stringBuilder.ToString();
        }

        /// <summary>  
        /// Unicode转字符串  
        /// </summary>  
        /// <param name="source">经过Unicode编码的字符串</param>  
        /// <returns>正常字符串</returns>  
        public static string Unicode2String(string source)
        {
            return new Regex(@"\\u([0-9A-F]{4})", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace(
                         source, x => string.Empty + Convert.ToChar(Convert.ToUInt16(x.Result("$1"), 16)));
        }  

  调用:

// configFile为文件名
// jdNew为JSON对象
// jdNew.ToJson()将JSON对象转成字符串
File.WriteAllText(configFile, Unicode2String( jdNew.ToJson()));

  
  以上代码,均为网上获取,同时也分享给大家,希望对大家有用。
  各位可发挥自己的想象力,在此基础上,做出自己需要的东西了。
  C# 最新文章
字符串阵列分别输出元素的索引,原值和长度
格式化你的字符串
C#宣告一个变量
C#中级
拆分一个字符串并把每个字符单独输出
通过手机号定位归属地
C# DBNULL与NULL之间的区别【转】
Xamarin
List,DataTable实现行转列的通用方案
C# 语音识别
上一篇文章           查看所有文章
加:2017-12-08 23:22:03  更:2017-12-08 23:22:28 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 龙发科技 开发 中国文化 阅读网 日历 万年历 2020年10日历
2020-10-27 8:39:44
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识