CommonHelper.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. using System.Net;
  2. using System.Text;
  3. using WingCloudServer.IpOfflineTools.Model;
  4. using Newtonsoft.Json;
  5. namespace WingCloudServer.IpOfflineTools.Service
  6. {
  7. /// <summary>
  8. /// 辅助类
  9. /// </summary>
  10. public class CommonHelper
  11. {
  12. //地球曲率
  13. private const double EARTH_RADIUS = 6378137;
  14. /// <summary>
  15. /// 当前时间的时间戳
  16. /// </summary>
  17. public static long GetCurrentTimeStamp()
  18. {
  19. TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
  20. var timeStamp = Convert.ToInt64(ts.TotalMilliseconds);
  21. return timeStamp;
  22. }
  23. /// <summary>
  24. /// 国内省份、直辖市列表
  25. /// </summary>
  26. /// <param name="ipAddress"></param>
  27. /// <returns></returns>
  28. public static List<string> GetProvinceList()
  29. {
  30. List<string> list = new List<string>()
  31. {
  32. "北京",
  33. "上海",
  34. "天津",
  35. "重庆",
  36. "黑龙江",
  37. "辽宁",
  38. "吉林",
  39. "河北",
  40. "河南",
  41. "湖北",
  42. "湖南",
  43. "山东",
  44. "山西",
  45. "陕西",
  46. "安徽",
  47. "浙江",
  48. "江苏",
  49. "福建",
  50. "广东",
  51. "海南",
  52. "四川",
  53. "云南",
  54. "贵州",
  55. "青海",
  56. "甘肃",
  57. "江西",
  58. "宁夏",
  59. "内蒙古",
  60. "新疆",
  61. "西藏",
  62. "广西",
  63. };
  64. return list;
  65. }
  66. /// <summary>
  67. /// 国内省份对应的市的列表
  68. /// </summary>
  69. /// <param name="ipAddress"></param>
  70. /// <returns></returns>
  71. public static Dictionary<string, List<string>> GetCityDictionary()
  72. {
  73. var dic = new Dictionary<string, List<string>>();
  74. var gdList = new List<string>() { "东莞市", "广州市", "中山市", "深圳市", "惠州市", "江门市", "珠海市", "汕头市", "佛山市", "湛江市", "河源市", "肇庆市", "潮州市", "清远市", "韶关市", "揭阳市", "阳江市", "云浮市", "茂名市", "梅州市", "汕尾市" };
  75. dic.Add("广东", gdList);
  76. var hljList = new List<string>() { "齐齐哈尔市", "哈尔滨市", "大庆市", "佳木斯市", "双鸭山市", "牡丹江市", "鸡西市", "黑河市", "绥化市", "鹤岗市", "伊春市", "大兴安岭地区", "七台河市" };
  77. dic.Add("黑龙江", hljList);
  78. var lnList = new List<string>() { "大连市", "沈阳市", "丹东市", "辽阳市", "葫芦岛市", "锦州市", "朝阳市", "营口市", "鞍山市", "抚顺市", "阜新市", "本溪市", "盘锦市", "铁岭市" };
  79. dic.Add("辽宁", lnList);
  80. var jlList = new List<string>() { "吉林市", "长春市", "白山市", "白城市", "延边州", "松原市", "辽源市", "通化市", "四平市" };
  81. dic.Add("吉林", jlList);
  82. var hbdList = new List<string>() { "石家庄市", "唐山市", "保定市", "邯郸市", "邢台市", "河北区", "沧州市", "秦皇岛市", "张家口市", "衡水市", "廊坊市", "承德市" };
  83. dic.Add("河北", hbdList);
  84. var hnList = new List<string>() { "郑州市", "南阳市", "新乡市", "安阳市", "洛阳市", "信阳市", "平顶山市", "周口市", "商丘市", "开封市", "焦作市", "驻马店市", "濮阳市", "三门峡市", "漯河市", "许昌市", "鹤壁市", "济源市" };
  85. dic.Add("河南", hnList);
  86. var hbList = new List<string>() { "武汉市", "宜昌市", "襄樊市", "荆州市", "恩施州", "孝感市", "黄冈市", "十堰市", "咸宁市", "黄石市", "仙桃市", "随州市", "天门市", "荆门市", "潜江市", "鄂州市", "神农架林区" };
  87. dic.Add("湖北", hbList);
  88. var hndList = new List<string>() { "长沙市", "邵阳市", "常德市", "衡阳市", "株洲市", "湘潭市", "永州市", "岳阳市", "怀化市", "郴州市", "娄底市", "益阳市", "张家界市", "湘西州" };
  89. dic.Add("湖南", hndList);
  90. var sdList = new List<string>() { "济南市", "青岛市", "临沂市", "济宁市", "菏泽市", "烟台市", "泰安市", "淄博市", "潍坊市", "日照市", "威海市", "滨州市", "东营市", "聊城市", "德州市", "莱芜市", "枣庄市" };
  91. dic.Add("山东", sdList);
  92. var sxist = new List<string>() { "太原市", "大同市", "运城市", "长治市", "晋城市", "忻州市", "临汾市", "吕梁市", "晋中市", "阳泉市", "朔州市" };
  93. dic.Add("山西", sxist);
  94. var sxdList = new List<string>() { "西安市", "咸阳市", "宝鸡市", "汉中市", "渭南市", "安康市", "榆林市", "商洛市", "延安市", "铜川市" };
  95. dic.Add("陕西", sxdList);
  96. var ahList = new List<string>() { "芜湖市", "合肥市", "六安市", "宿州市", "阜阳市", "安庆市", "马鞍山市", "蚌埠市", "淮北市", "淮南市", "宣城市", "黄山市", "铜陵市", "亳州市", "池州市", "巢湖市", "滁州市" };
  97. dic.Add("安徽", ahList);
  98. var zjList = new List<string>() { "温州市", "宁波市", "杭州市", "台州市", "嘉兴市", "金华市", "湖州市", "绍兴市", "舟山市", "丽水市", "衢州市" };
  99. dic.Add("浙江", zjList);
  100. var jsList = new List<string>() { "苏州市", "徐州市", "盐城市", "无锡市", "南京市", "南通市", "连云港市", "常州市", "扬州市", "镇江市", "淮安市", "泰州市", "宿迁市" };
  101. dic.Add("江苏", jsList);
  102. var fjList = new List<string>() { "漳州市", "泉州市", "厦门市", "福州市", "莆田市", "宁德市", "三明市", "南平市", "龙岩市" };
  103. dic.Add("福建", fjList);
  104. var hnsList = new List<string>() { "三亚市", "海口市", "琼海市", "文昌市", "东方市", "昌江县", "陵水县", "乐东县", "五指山市", "保亭县", "澄迈县", "万宁市", "儋州市", "临高县", "白沙县", "定安县", "琼中县", "屯昌县" };
  105. dic.Add("海南", hnsList);
  106. var scList = new List<string>() { "成都市", "绵阳市", "广元市", "达州市", "南充市", "德阳市", "广安市", "阿坝州", "巴中市", "遂宁市", "内江市", "凉山州", "攀枝花市", "乐山市", "自贡市", "泸州市", "雅安市", "宜宾市", "资阳市", "眉山市", "甘孜州" };
  107. dic.Add("四川", scList);
  108. var ynList = new List<string>() { "昆明市", "红河州", "大理州", "文山州", "德宏州", "曲靖市", "昭通市", "楚雄州", "保山市", "玉溪市", "丽江地区", "临沧地区", "思茅地区", "西双版纳州", "怒江州", "迪庆州" };
  109. dic.Add("云南", ynList);
  110. var gzList = new List<string>() { "贵阳市", "黔东南州", "黔南州", "遵义市", "黔西南州", "毕节地区", "铜仁地区", "安顺市", "六盘水市" };
  111. dic.Add("贵州", gzList);
  112. var gqhList = new List<string>() { "西宁市", "海西州", "海东地区", "海北州", "果洛州", "玉树州", "黄南藏族自治州" };
  113. dic.Add("青海", gqhList);
  114. var gsList = new List<string>() { "兰州市", "天水市", "庆阳市", "武威市", "酒泉市", "张掖市", "陇南地区", "白银市", "定西地区", "平凉市", "嘉峪关市", "临夏回族自治州", "金昌市", "甘南州" };
  115. dic.Add("甘肃", gsList);
  116. var jxList = new List<string>() { "南昌市", "赣州市", "上饶市", "吉安市", "九江市", "新余市", "抚州市", "宜春市", "景德镇市", "萍乡市", "鹰潭市" };
  117. dic.Add("江西", jxList);
  118. var nxList = new List<string>() { "银川市", "吴忠市", "中卫市", "石嘴山市", "固原市" };
  119. dic.Add("宁夏", nxList);
  120. var nmgList = new List<string>() { "赤峰市", "包头市", "通辽市", "呼和浩特市", "乌海市", "鄂尔多斯市", "呼伦贝尔市", "兴安盟", "巴彦淖尔盟", "乌兰察布盟", "锡林郭勒盟", "阿拉善盟" };
  121. dic.Add("内蒙古", nmgList);
  122. var xjList = new List<string>() { "乌鲁木齐市", "伊犁州", "昌吉州", "石河子市", "哈密地区", "阿克苏地区", "巴音郭楞州", "喀什地区", "塔城地区", "克拉玛依市", "和田地区", "阿勒泰州", "吐鲁番地区", "阿拉尔市", "博尔塔拉州", "五家渠市", "克孜勒苏州", "图木舒克市" };
  123. dic.Add("新疆", xjList);
  124. var xzList = new List<string>() { "拉萨市", "山南地区", "林芝地区", "日喀则地区", "阿里地区", "昌都地区", "那曲地区" };
  125. dic.Add("西藏", xzList);
  126. var gxList = new List<string>() { "贵港市", "玉林市", "北海市", "南宁市", "柳州市", "桂林市", "梧州市", "钦州市", "来宾市", "河池市", "百色市", "贺州市", "崇左市", "防城港市" };
  127. dic.Add("广西", gxList);
  128. var bjList = new List<string>() { "朝阳区" };
  129. dic.Add("北京", bjList);
  130. var tjList = new List<string>() { "南开区" };
  131. dic.Add("天津", tjList);
  132. var shList = new List<string>() { "徐汇区" };
  133. dic.Add("上海", shList);
  134. var cqList = new List<string>() { "渝中区" };
  135. dic.Add("重庆", cqList);
  136. return dic;
  137. }
  138. /// <summary>
  139. /// ip地址转long
  140. /// </summary>
  141. /// <param name="ipAddress"></param>
  142. /// <returns></returns>
  143. public static long IpToLong(string ipAddress)
  144. {
  145. byte[] byts = IPAddress.Parse(ipAddress).GetAddressBytes();
  146. Array.Reverse(byts); // 需要倒置一次字节序
  147. long ipLong = BitConverter.ToUInt32(byts, 0);
  148. return ipLong;
  149. }
  150. /// <summary>
  151. /// 获取ip的定位信息
  152. /// </summary>
  153. /// <param name="d"></param>
  154. /// <returns></returns>
  155. public static IPServiceResult GetIpLocationInfo(string ip)
  156. {
  157. IPServiceResult info = new IPServiceResult();
  158. var url = string.Format("https://apis.map.qq.com/ws/location/v1/ip?ip={0}&key=4Z3BZ-L5RK6-MJ5SC-EXNFA-3V7PH-RSB3U", ip);
  159. try
  160. {
  161. var json = HttpGet(url);
  162. if (!string.IsNullOrEmpty(json))
  163. {
  164. var serviceGuideInfo = JsonConvert.DeserializeObject<GuideResultInfo>(json);
  165. if (serviceGuideInfo != null && serviceGuideInfo.status == 0 && serviceGuideInfo.result != null)
  166. {
  167. info = serviceGuideInfo.result;
  168. }
  169. }
  170. }
  171. catch (Exception ex)
  172. {
  173. //异常处理
  174. throw ex;
  175. }
  176. return info;
  177. }
  178. /// <summary>
  179. /// 计算两点位置的距离,返回两点的距离,单位m
  180. /// 该公式为GOOGLE提供,误差小为小数点后.2位
  181. /// </summary>
  182. /// <param name="lat1">第一点纬度</param>
  183. /// <param name="lng1">第一点经度</param>
  184. /// <param name="lat2">第二点纬度</param>
  185. /// <param name="lng2">第二点经度</param>
  186. /// <returns></returns>
  187. public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
  188. {
  189. double radLat1 = Rad(lat1);
  190. double radLng1 = Rad(lng1);
  191. double radLat2 = Rad(lat2);
  192. double radLng2 = Rad(lng2);
  193. double a = radLat1 - radLat2;
  194. double b = radLng1 - radLng2;
  195. double result = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2))) * EARTH_RADIUS;
  196. return result;
  197. }
  198. /// <summary>
  199. /// 经纬度转化成弧度
  200. /// </summary>
  201. /// <param name="d"></param>
  202. /// <returns></returns>
  203. public static double Rad(double d)
  204. {
  205. return (double)d * Math.PI / 180d;
  206. }
  207. /// <summary>
  208. /// 处理http GET请求,并返回数据
  209. /// </summary>
  210. /// <param name="url">请求的url地址</param>
  211. /// <returns>http GET成功后返回的数据,失败抛WebException异常</returns>
  212. public static string HttpGet(string url)
  213. {
  214. System.GC.Collect();
  215. string result = "";
  216. HttpWebRequest request = null;
  217. HttpWebResponse response = null;
  218. //请求url以获取数据
  219. try
  220. {
  221. //设置最大连接数
  222. ServicePointManager.DefaultConnectionLimit = 40;
  223. /***************************************************************
  224. * 下面设置HttpWebRequest的相关属性
  225. * ************************************************************/
  226. request = (HttpWebRequest)WebRequest.Create(url);
  227. request.Method = "GET";
  228. //获取服务器返回值
  229. response = (HttpWebResponse)request.GetResponse();
  230. //获取HTTP返回数据
  231. StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  232. result = sr.ReadToEnd().Trim();
  233. sr.Close();
  234. }
  235. catch (Exception e)
  236. {
  237. throw e;
  238. }
  239. finally
  240. {
  241. //关闭连接和流
  242. if (response != null)
  243. {
  244. response.Close();
  245. }
  246. if (request != null)
  247. {
  248. request.Abort();
  249. }
  250. }
  251. return result;
  252. }
  253. }
  254. }