通过手机号定位归属地_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 通过手机号定位归属地

通过手机号定位归属地

 2017/12/8 10:14:45  Tiger.liang  程序员俱乐部  我要评论(0)
  • 摘要:工作中,很多地方,都存在只知道手机号,同时也想知道这个手机号的归属地的情况。本功能,即可实现这个要求。同时,可在此基础上做调整,实现其它功能,如制作一个属于自己的手机号段归属库等。。。实现思路:通过网上提供的免费查询接口,取得返回信息,并对返回信息进行解析处理,获取自己需要的数据。使用控件:LitJson.dll(LitJson.dll下载或到网上搜索)代码如下:///<summary>///获取url的返回值///</summary>///<
  • 标签:手机 定位

  工作中,很多地方,都存在只知道手机号,同时也想知道这个手机号的归属地的情况。

  本功能,即可实现这个要求。同时,可在此基础上做调整,实现其它功能,如制作一个属于自己的手机号段归属库等。。。

  实现思路:通过网上提供的免费查询接口,取得返回信息,并对返回信息进行解析处理,获取自己需要的数据。

  使用控件:LitJson.dll (LitJson.dll下载  或到网上搜索)

  代码如下:

class="brush:csharp;gutter:true;">        /// <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()));

  

  以上代码,均为网上获取,同时也分享给大家,希望对大家有用。

 

  各位可发挥自己的想象力,在此基础上,做出自己需要的东西了。

 

发表评论
用户名: 匿名