using System.Collections; using System.Diagnostics; using System.Text; using System.Web; namespace Nirvana.Common { /// /// 常用公共类 /// public class Common { #region Stopwatch计时器 /// /// 计时器开始 /// /// public static Stopwatch TimerStart() { Stopwatch watch = new Stopwatch(); watch.Reset(); watch.Start(); return watch; } /// /// 计时器结束 /// /// /// public static string TimerEnd(Stopwatch watch) { watch.Stop(); double costtime = watch.ElapsedMilliseconds; return costtime.ToString(); } #endregion Stopwatch计时器 #region 删除数组中的重复项 /// /// 删除数组中的重复项 /// /// /// public static string[] RemoveDup(string[] values) { List list = new List(); for (int i = 0; i < values.Length; i++)//遍历数组成员 { if (!list.Contains(values[i])) { list.Add(values[i]); }; } return list.ToArray(); } #endregion 删除数组中的重复项 #region 自动生成编号 /// /// 表示全局唯一标识符 (GUID)。 /// /// public static string GuId() { return Guid.NewGuid().ToString(); } /// /// 自动生成编号 201008251145409865 /// /// public static string CreateNo() { Random random = new Random(); string strRandom = random.Next(1000, 10000).ToString(); //生成编号 string code = DateTime.Now.ToString("yyyyMMddHHmmss") + strRandom;//形如 return code; } #endregion 自动生成编号 #region 生成0-9随机数 /// /// 生成0-9随机数 /// /// 生成长度 /// public static string RndNum(int codeNum) { StringBuilder sb = new StringBuilder(codeNum); Random rand = new Random(); for (int i = 1; i < codeNum + 1; i++) { int t = rand.Next(9); sb.AppendFormat("{0}", t); } return sb.ToString(); } #endregion 生成0-9随机数 #region 生成订单号 /// /// 生成订单号,共21位,订单号规则,V{年月日}{当前登录账户的手机号后四位}{随机八位数} /// /// 用户手机号 /// public static string OrderNo(string phone) { //订单号,共21位,订单号规则,V{年月日}{当前登录账户的手机号后四位}{随机八位数} string telphone = "0000"; if (!string.IsNullOrEmpty(phone) && phone.Length > 4) { telphone = phone.Substring(phone.Length - 4); } var orderno = $"{DateTime.Now.ToString("yyyyMMdd")}{telphone}{Common.RndNum(8)}"; return orderno; } #endregion 生成订单号 #region 根据GUID获取16位的唯一字符串 public static string Guid16() { long i = 1; foreach (byte b in Guid.NewGuid().ToByteArray()) i *= ((int)b + 1); return string.Format("{0:x}", i - DateTime.Now.Ticks); } #endregion 根据GUID获取16位的唯一字符串 #region 删除最后一个字符之后的字符 /// /// 删除最后结尾的一个逗号 /// public static string DelLastComma(string str) { return str.Substring(0, str.LastIndexOf(",")); } /// /// 删除最后结尾的指定字符后的字符 /// public static string DelLastChar(string str, string strchar) { return str.Substring(0, str.LastIndexOf(strchar)); } /// /// 删除最后结尾的长度 /// /// /// /// public static string DelLastLength(string str, int Length) { if (string.IsNullOrEmpty(str)) return ""; str = str.Substring(0, str.Length - Length); return str; } #endregion 删除最后一个字符之后的字符 #region 计算时间差 /// /// /// /// 开始时间 /// 结束时间 /// 1-毫秒,2-秒,3-分钟,4-小时,5-天 /// public static double DateDiff(DateTime starttime, DateTime endtime, int t = 1) { TimeSpan ts1 = new TimeSpan(starttime.Ticks); TimeSpan ts2 = new TimeSpan(endtime.Ticks); TimeSpan ts3 = ts1.Subtract(ts2).Duration(); if (t == 1) //计算毫秒 { return ts3.TotalMilliseconds; } if (t == 2) { return ts3.TotalSeconds; } if (t == 3) { return ts3.TotalMinutes; } if (t == 4) { return ts3.TotalHours; } if (t == 5) { return ts3.TotalDays; } return 0; } #endregion 计算时间差 #region 获取当前时间戳 /// /// 获取当前时间戳 /// /// public static string GetTimestamp() { TimeSpan ts = DateTimeOffset.Now - new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero); return Convert.ToInt64(ts.TotalSeconds).ToString(); } /// /// 获取当前时间戳,int类型 /// /// public static int GetTimestampInt() { return GetTimestamp().ToInt(); } #endregion 获取当前时间戳 #region 生成随机字符串 /// /// 生成随机字符串 /// /// public static string GetNoncestr() { return Md5.md5(Guid.NewGuid().ToString(), 32); } #endregion 生成随机字符串 #region 腾讯常用签名生成 /// /// 生成MD5签名 /// /// 参数 /// public static string CreateMd5Sign(Hashtable param, string appkey = "") { var str = SortParam(param, appkey); string Sign = Md5.md5(str, 32).ToUpper(); return Sign; } /// /// 组合生成签名的参数 /// /// /// /// public static string SortParam(Hashtable param, string appkey = "") { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(param.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = string.Empty; if (param[k] != null) { v = HttpUtility.UrlEncode(param[k].ToString()); if (v.Contains("%")) { v = v.ToUpper(); } } if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0) { if (sb.Length == 0) { sb.Append(k + "=" + v); } else { sb.Append("&" + k + "=" + v); } } } if (!string.IsNullOrEmpty(appkey)) { sb.Append("&app_key=" + appkey); } return sb.ToString(); } #endregion 腾讯常用签名生成 /// /// 获取时间戳,秒 /// /// public static int GetTimestamps() { DateTime dateTimeStart = TimeZoneInfo.ConvertTimeToUtc(new DateTime(1970, 1, 1, 8, 0, 0)); int timestamp = Convert.ToInt32((DateTime.Now - dateTimeStart).TotalSeconds); return timestamp; } /// /// 获取随机数 /// /// public static int GetNonce() { var random = new Random(); int nonce = random.Next(1, Int32.MaxValue); return nonce; } /// /// 组合生成签名的参数 /// /// /// /// public static string SortRequestParam(Hashtable param) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(param.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = string.Empty; if (param[k] != null) { v = param[k].ToString(); } if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0) { if (sb.Length == 0) { sb.Append(k + "=" + v); } else { sb.Append("&" + k + "=" + v); } } } return sb.ToString(); } // /// 根据GUID获取19位的唯一数字序列 /// /// public static long GuidToLongID() { byte[] buffer = Guid.NewGuid().ToByteArray(); return BitConverter.ToInt64(buffer, 0); } } }