using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Linq;
namespace ARW.Common
{
public class Tools
{
///
/// 要分割的字符串 eg: 1,3,10,00
///
///
/// 分割的字符串
///
public static long[] SpitLongArrary(string str, char split = ',')
{
if (string.IsNullOrEmpty(str)) { return Array.Empty(); }
str = str.TrimStart(split).TrimEnd(split);
string[] strIds = str.Split(split, (char)StringSplitOptions.RemoveEmptyEntries);
long[] infoIdss = Array.ConvertAll(strIds, s => long.Parse(s));
return infoIdss;
}
public static int[] SpitIntArrary(string str, char split = ',')
{
if (string.IsNullOrEmpty(str)) { return Array.Empty(); }
string[] strIds = str.Split(split, (char)StringSplitOptions.RemoveEmptyEntries);
int[] infoIdss = Array.ConvertAll(strIds, s => int.Parse(s));
return infoIdss;
}
public static string[] SpitStringArrary(string str, char split = ',')
{
if (string.IsNullOrEmpty(str)) { return Array.Empty(); }
string[] strIds = str.Split(split, (char)StringSplitOptions.RemoveEmptyEntries);
return strIds;
}
///
/// 根据日期获取星期几
///
public static string GetWeekByDate(DateTime dt)
{
var day = new[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
return day[Convert.ToInt32(dt.DayOfWeek.ToString("d"))];
}
///
/// 得到这个月的第几周
///
/// 年月日
/// 传递过来的时间是第几周
public static int GetWeekNumInMonth(DateTime daytime)
{
int dayInMonth = daytime.Day;
//本月第一天
DateTime firstDay = daytime.AddDays(1 - daytime.Day);
//本月第一天是周几
int weekday = (int)firstDay.DayOfWeek == 0 ? 7 : (int)firstDay.DayOfWeek;
//本月第一周有几天
int firstWeekEndDay = 7 - (weekday - 1);
//当前日期和第一周之差
int diffday = dayInMonth - firstWeekEndDay;
diffday = diffday > 0 ? diffday : 1;
//当前是第几周,如果整除7就减一天
int weekNumInMonth = ((diffday % 7) == 0
? (diffday / 7 - 1)
: (diffday / 7)) + 1 + (dayInMonth > firstWeekEndDay ? 1 : 0);
return weekNumInMonth;
}
///
/// 判断一个字符串是否为url
///
///
///
public static bool IsUrl(string str)
{
try
{
string Url = @"^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$";
return Regex.IsMatch(str, Url);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
///
/// 计算密码强度
///
/// 密码字符串
///
public static bool PasswordStrength(string password)
{
//空字符串强度值为0
if (string.IsNullOrEmpty(password)) return false;
//字符统计
int iNum = 0, iLtt = 0, iSym = 0;
foreach (char c in password)
{
if (c >= '0' && c <= '9') iNum++;
else if (c >= 'a' && c <= 'z') iLtt++;
else if (c >= 'A' && c <= 'Z') iLtt++;
else iSym++;
}
if (iLtt == 0 && iSym == 0) return false; //纯数字密码
if (iNum == 0 && iLtt == 0) return false; //纯符号密码
if (iNum == 0 && iSym == 0) return false; //纯字母密码
if (password.Length >= 6 && password.Length < 16) return true;//长度不大于6的密码
if (iLtt == 0) return true; //数字和符号构成的密码
if (iSym == 0) return true; //数字和字母构成的密码
if (iNum == 0) return true; //字母和符号构成的密码
return true; //由数字、字母、符号构成的密码
}
public static string GetNumCode(int lenght)
{
Random random = new Random();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < lenght; i++)
{
stringBuilder.Append(random.Next(1, 10));
}
return stringBuilder.ToString();
}
// 通过地址获取经纬度
public static (double? lng, double? lat, string country, string province, string city, string area, string addr) GetXY(string address, System.Net.Http.HttpClient client)
{
string gdkey = "ec7484f53ba7b557eac7efc6687e5c0d";//高德key
string bdkey = "bnPWCosxo6QwUC7DsfkGiunf4zBZ3ogy";//百度key
//高德API会把地址拆分成省市区和坐标返回,百度只返回坐标
string url = String.Format("https://restapi.amap.com/v3/geocode/geo?address={0}&output=json&key={1}", address, gdkey);
//结果
string result = client.GetStringAsync(url).Result;
var locationResult = (JObject)JsonConvert.DeserializeObject(result);
if (locationResult["status"].ToString() == "1" && locationResult["geocodes"].Count() > 0)
{
var coordinate = locationResult["geocodes"][0]["location"].ToString().Split(",");
var country = locationResult["geocodes"][0]["country"].ToString().Replace("[]", "");
var province = locationResult["geocodes"][0]["province"].ToString().Replace("[]", "");
var city = locationResult["geocodes"][0]["city"].ToString().Replace("[]", "");
var district = locationResult["geocodes"][0]["district"].ToString().Replace("[]", "");
var street = locationResult["geocodes"][0]["street"].ToString().Replace("[]", "");
var number = locationResult["geocodes"][0]["number"].ToString().Replace("[]", "");
double? lng = null, lat = null;
if (coordinate.Length == 2)
{
string lngStr = coordinate[0];
string latStr = coordinate[1];
lng = double.Parse(lngStr);
lat = double.Parse(latStr);
}
return (lng, lat, country, province, city, district, street + number);
}
else
{
//百度API
url = String.Format("http://api.map.baidu.com/geocoding/v3/?address={0}&output=json&ak={1}", address, bdkey);
result = client.GetStringAsync(url).Result;
locationResult = (JObject)JsonConvert.DeserializeObject(result);
if (locationResult["status"].ToString() == "0")
{
string lngStr = locationResult["result"]["location"]["lng"].ToString();
string latStr = locationResult["result"]["location"]["lat"].ToString();
double lng = double.Parse(lngStr);
double lat = double.Parse(latStr);
return (lng, lat, "", "", "", "", "");
}
else
{
return (null, null, "", "", "", "", "");
}
}
}
public static T JsonToVo(string json)
{
json = json.Remove(0, 1);
json = json.Substring(0, json.Length - 1);
var data = JsonConvert.DeserializeObject(json);
return data;
}
}
}