C# 常用公共类
public class Utils { /// <summary> /// 生成随机字母字符串(数字字母混和) /// </summary> /// <param name="codeCount">待生成的位数</param> public static string GetCheckCode(int codeCount) { string str = string.Empty; int rep = 0; long num2 = DateTime.Now.Ticks + rep; rep++; Random random = new Random(((int)(((ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep))); for (int i = 0; i < codeCount; i++) { char ch; int num = random.Next(); if ((num % 2) == 0) { ch = (char)(0x30 + ((ushort)(num % 10))); } else { ch = (char)(0x41 + ((ushort)(num % 0x1a))); } str = str + ch.ToString(); } return str; } /// <summary> /// 将字符串转换为int类型数组 /// </summary> /// <param name="str">如1,2,3,4,5</param> /// <returns></returns> public static List<int> StrToListInt(string str) { if (string.IsNullOrWhiteSpace(str)) { return null; } var list = new List<int>(); if (!str.Contains(",")) { list.Add(int.Parse(str)); return list; } var slist = str.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (var item in slist) { list.Add(int.Parse(item)); } return list; } /// <summary> /// 将字符串转换为int类型数组 /// </summary> /// <param name="str">如1,2,3,4,5</param> /// <returns></returns> public static List<string> StrToListString(string str) { var list = new List<string>(); if (!str.Contains(",")) { list.Add(str); return list; } var slist = str.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (var item in slist) { list.Add(item); } return list; } /// <summary> /// 将字符串转换为数组 /// </summary> /// <param name="str">字符串</param> /// <returns>字符串数组</returns> public static string[] GetStrArray(string str) { return str.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); } #region 截取字符串 public static string GetSubString(string pSrcString, int pLength, string pTailString) { return GetSubString(pSrcString, 0, pLength, pTailString); } public static string GetSubString(string pSrcString, int pStartIndex, int pLength, string pTailString) { string str = pSrcString; byte[] bytes = Encoding.UTF8.GetBytes(pSrcString); foreach (char ch in Encoding.UTF8.GetChars(bytes)) { if (((ch > 'ࠀ') && (ch < '一')) || ((ch > 0xac00) && (ch < 0xd7a3))) { if (pStartIndex >= pSrcString.Length) { return ""; } return pSrcString.Substring(pStartIndex, ((pLength + pStartIndex) > pSrcString.Length) ? (pSrcString.Length - pStartIndex) : pLength); } } if (pLength < 0) { return str; } byte[] sourceArray = Encoding.Default.GetBytes(pSrcString); if (sourceArray.Length <= pStartIndex) { return str; } int length = sourceArray.Length; if (sourceArray.Length > (pStartIndex + pLength)) { length = pLength + pStartIndex; } else { pLength = sourceArray.Length - pStartIndex; pTailString = ""; } int num2 = pLength; int[] numArray = new int[pLength]; byte[] destinationArray = null; int num3 = 0; for (int i = pStartIndex; i < length; i++) { if (sourceArray[i] > 0x7f) { num3++; if (num3 == 3) { num3 = 1; } } else { num3 = 0; } numArray[i] = num3; } if ((sourceArray[length - 1] > 0x7f) && (numArray[pLength - 1] == 1)) { num2 = pLength + 1; } destinationArray = new byte[num2]; Array.Copy(sourceArray, pStartIndex, destinationArray, 0, num2); return (Encoding.Default.GetString(destinationArray) + pTailString); } #endregion #region 截取字符长度 /// <summary> /// 截取字符长度 /// </summary> /// <param name="inputString">字符</param> /// <param name="len">长度</param> /// <returns></returns> public static string CutString(string inputString, int len) { if (string.IsNullOrEmpty(inputString)) return ""; inputString = DropHtml(inputString); ASCIIEncoding ascii = new ASCIIEncoding(); int tempLen = 0; string tempString = ""; byte[] s = ascii.GetBytes(inputString); for (int i = 0; i < s.Length; i++) { if ((int)s[i] == 63) { tempLen += 2; } else { tempLen += 1; } try { tempString += inputString.Substring(i, 1); } catch { break; } if (tempLen > len) break; } //如果截过则加上半个省略号 byte[] mybyte = System.Text.Encoding.Default.GetBytes(inputString); if (mybyte.Length > len) tempString += "…"; return tempString; } public static string DropHtml(string htmlstring) { if (string.IsNullOrEmpty(htmlstring)) return ""; //删除脚本 htmlstring = Regex.Replace(htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase); //删除HTML htmlstring = Regex.Replace(htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"-->", "", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase); htmlstring = Regex.Replace(htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase); htmlstring = htmlstring.Replace("<", ""); htmlstring = htmlstring.Replace(">", ""); htmlstring = htmlstring.Replace("\r\n", ""); //htmlstring = HttpContext.Current.Server.HtmlEncode(htmlstring).Trim(); return htmlstring; } #endregion #region 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母 /// <summary> /// 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母 /// </summary> /// <param name="CnChar">单个汉字</param> /// <returns>单个大写字母</returns> public static string GetCharSpellCode(string CnChar) { long iCnChar; byte[] ZW = Encoding.Default.GetBytes(CnChar); //如果是字母,则直接返回首字母 if (ZW.Length == 1) { return CutString(CnChar.ToUpper(), 1); } else { int i1 = (short)(ZW[0]); int i2 = (short)(ZW[1]); iCnChar = i1 * 256 + i2; } // iCnChar match the constant if ((iCnChar >= 45217) && (iCnChar <= 45252)) { return "A"; } else if ((iCnChar >= 45253) && (iCnChar <= 45760)) { return "B"; } else if ((iCnChar >= 45761) && (iCnChar <= 46317)) { return "C"; } else if ((iCnChar >= 46318) && (iCnChar <= 46825)) { return "D"; } else if ((iCnChar >= 46826) && (iCnChar <= 47009)) { return "E"; } else if ((iCnChar >= 47010) && (iCnChar <= 47296)) { return "F"; } else if ((iCnChar >= 47297) && (iCnChar <= 47613)) { return "G"; } else if ((iCnChar >= 47614) && (iCnChar <= 48118)) { return "H"; } else if ((iCnChar >= 48119) && (iCnChar <= 49061)) { return "J"; } else if ((iCnChar >= 49062) && (iCnChar <= 49323)) { return "K"; } else if ((iCnChar >= 49324) && (iCnChar <= 49895)) { return "L"; } else if ((iCnChar >= 49896) && (iCnChar <= 50370)) { return "M"; } else if ((iCnChar >= 50371) && (iCnChar <= 50613)) { return "N"; } else if ((iCnChar >= 50614) && (iCnChar <= 50621)) { return "O"; } else if ((iCnChar >= 50622) && (iCnChar <= 50905)) { return "P"; } else if ((iCnChar >= 50906) && (iCnChar <= 51386)) { return "Q"; } else if ((iCnChar >= 51387) && (iCnChar <= 51445)) { return "R"; } else if ((iCnChar >= 51446) && (iCnChar <= 52217)) { return "S"; } else if ((iCnChar >= 52218) && (iCnChar <= 52697)) { return "T"; } else if ((iCnChar >= 52698) && (iCnChar <= 52979)) { return "W"; } else if ((iCnChar >= 52980) && (iCnChar <= 53640)) { return "X"; } else if ((iCnChar >= 53689) && (iCnChar <= 54480)) { return "Y"; } else if ((iCnChar >= 54481) && (iCnChar <= 55289)) { return "Z"; } else return ("?"); } #endregion #region 获得IP地址 /// <summary> /// 获得IP地址 /// </summary> /// <returns>字符串数组</returns> public static string GetIp() { HttpContextAccessor _context = new HttpContextAccessor(); var ip = _context.HttpContext.Request.Headers["X-Forwarded-For"].ToString(); if (string.IsNullOrEmpty(ip)) { ip = _context.HttpContext.Connection.RemoteIpAddress.ToString(); } return ip; } #endregion #region 获得当前访问的URL地址 /// <summary> /// 获得当前访问的URL地址 /// </summary> /// <returns>字符串数组</returns> public static string GetUrl() { HttpContextAccessor _context = new HttpContextAccessor(); return _context.HttpContext.Request.Path.ToString(); } #endregion #region 获取当前服务器域名 /// <summary> /// 获取当前服务器域名 /// </summary> /// <returns></returns> public static string GetSchemeHost() { HttpContextAccessor _context = new HttpContextAccessor(); return _context.HttpContext.Request.Scheme + "://" + _context.HttpContext.Request.Host; } #endregion #region 分割字符串 public static string[] SplitString(string strContent, char strSplit) { if (!string.IsNullOrEmpty(strContent)) { return strContent.Split(new char[] { strSplit }, StringSplitOptions.RemoveEmptyEntries); } else { return new string[0] { }; } } /// <summary> /// 分割字符串 /// </summary> public static string[] SplitString(string strContent, string strSplit) { if (!string.IsNullOrEmpty(strContent)) { if (strContent.IndexOf(strSplit, StringComparison.Ordinal) < 0) return new string[] { strContent }; return Regex.Split(strContent, Regex.Escape(strSplit), RegexOptions.IgnoreCase); } else return new string[0] { }; } /// <summary> /// /// 按字符串长度切分成数组 /// /// </summary> /// /// <param name="str">原字符串</param> /// /// <param name="separatorCharNum">切分长度</param> /// /// <returns>字符串数组</returns> public static List<string> SplitByLen(string str, int separatorCharNum) { List<string> strList = new List<string>(); if (string.IsNullOrEmpty(str) || str.Length <= separatorCharNum) { return strList; } string tempStr = str; int iMax = Convert.ToInt32(Math.Ceiling(str.Length / (separatorCharNum * 1.0)));//获取循环次数 for (int i = 1; i <= iMax; i++) { string currMsg = tempStr.Substring(0, tempStr.Length > separatorCharNum ? separatorCharNum : tempStr.Length); strList.Add(currMsg); if (tempStr.Length > separatorCharNum) { tempStr = tempStr.Substring(separatorCharNum, tempStr.Length - separatorCharNum); } } return strList; } #endregion #region 显示错层方法 /// <summary> /// 显示错层方法 /// </summary> public static string LevelName(string name, decimal? level) { if (level > 1) { string nbsp = ""; for (int i = 0; i < level; i++) { nbsp += " "; } name = nbsp + "|--" + name; } return name; } #endregion #region 生成随机字母或数字 private static readonly Random Random = new Random(); /// <summary> /// 生成随机数字 /// </summary> /// <param name="length">生成长度</param> /// <returns></returns> public static string Number(int length) { return Number(length, false); } /// <summary> /// 生成随机数字 /// </summary> /// <param name="length">生成长度</param> /// <param name="sleep">是否要在生成前将当前线程阻止以避免重复</param> /// <returns></returns> public static string Number(int length, bool sleep) { if (sleep) System.Threading.Thread.Sleep(2); string result = ""; for (int i = 0; i < length; i++) { result += Random.Next(10).ToString(); } return result; } /// <summary> /// 根据日期和随机码生成订单号 /// </summary> /// <returns></returns> public static string GetOrderNumber() { string num = DateTime.Now.ToString("yyyyMMddHHmmssms"); //yyyyMMddHHmmssms return num + Number(2); } #endregion #region Base64位加密解密 /// <summary> /// 将字符串转换成base64格式,使用UTF8字符集 /// </summary> /// <param name="content">加密内容</param> /// <returns></returns> public static string Base64Encode(string content) { byte[] bytes = Encoding.UTF8.GetBytes(content); return Convert.ToBase64String(bytes); } /// <summary> /// 将base64格式,转换utf8 /// </summary> /// <param name="content">解密内容</param> /// <returns></returns> public static string Base64Decode(string content) { byte[] bytes = Convert.FromBase64String(content); return Encoding.UTF8.GetString(bytes); } #endregion #region 条形码解析 /// <summary> /// 分解条形码,并返回数组 /// </summary> /// <param name="code">条形码</param> /// <returns>数组0=品牌 1=季节 2=款式 3=批次 4=尺码</returns> public static List<string> GetSkuArray(string code) { var str = new List<string>(); //品牌,截取0-3 str.Add(code.Substring(0, 3)); //季节截取 str.Add(code.Substring(3, 1)); //款式截取 str.Add(code.Substring(4, 1)); //批次截取 str.Add(code.Substring(5, 1)); //尺码截取 str.Add(code.Substring(6, 1)); return str; } #endregion #region 返回采购单入库状态 /// <summary> /// 返回采购单入库状态 /// </summary> /// <param name="status">状态</param> /// <returns></returns> public static string PurchaseStatus(string status) { var str = ""; switch (int.Parse(status)) { case 1: str = "未完成入库"; break; case 2: str = "未完成付款"; break; case 3: str = "未完成到票"; break; case 4: str = "完成"; break; } return str; } #endregion #region 生成采购单编号 /// <summary> /// 生成采购单编号 /// </summary> /// <returns></returns> public static string PurchaseNumber(int lastNumber) { return "CG-" + DateTime.Now.ToString("yyyyMMdd") + "-" + lastNumber.ToString(); } #endregion #region 上传配置 /// <summary> /// 根据文件类型分配路径 /// </summary> /// <param name="fileExt"></param> /// <returns></returns> public static string AssigendPath(string fileExt, string path) { if (IsImage(fileExt)) return path + "/upload/images/" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + "/"; if (IsVideos(fileExt)) return path + "/upload/videos/" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + "/"; if (IsDocument(fileExt)) return "/upload/files/" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + "/"; if (IsMusics(fileExt)) return "/upload/musics/" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + "/"; return path + "/upload/others/"; } #endregion #region 文件格式 /// <summary> /// 是否为图片 /// </summary> /// <param name="_fileExt">文件扩展名,不含“.”</param> /// <returns></returns> private static bool IsImage(string _fileExt) { var images = new List<string> { "bmp", "gif", "jpg", "jpeg", "png" }; if (images.Contains(_fileExt.ToLower())) return true; return false; } /// <summary> /// 是否为视频 /// </summary> /// <param name="_fileExt">文件扩展名,不含“.”</param> /// <returns></returns> private static bool IsVideos(string _fileExt) { var videos = new List<string> { "rmvb", "mkv", "ts", "wma", "avi", "rm", "mp4", "flv", "mpeg", "mov", "3gp", "mpg" }; if (videos.Contains(_fileExt.ToLower())) return true; return false; } /// <summary> /// 是否为音频 /// </summary> /// <param name="_fileExt">文件扩展名,不含“.”</param> /// <returns></returns> private static bool IsMusics(string _fileExt) { var musics = new List<string> { "mp3", "wav" }; if (musics.Contains(_fileExt.ToLower())) return true; return false; } /// <summary> /// 是否为文档 /// </summary> /// <param name="_fileExt">文件扩展名,不含“.”</param> /// <returns></returns> private static bool IsDocument(string _fileExt) { var documents = new List<string> { "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt", "pdf" }; if (documents.Contains(_fileExt.ToLower())) return true; return false; } #endregion #region 返回活动名称 /// <summary> /// 返回活动名称 /// </summary> /// <param name="method"></param> /// <returns></returns> public static string GetActivityMethod(int method) { var str = ""; switch (method) { case 1: str = "打折"; break; case 2: str = "满减"; break; case 3: str = "买一赠一"; break; default: str = "无"; break; } return str; } /// <summary> /// 根据方式返回参加活动类型 /// </summary> /// <param name="method"></param> /// <returns></returns> public static byte GetActivityTypes(int method) { byte str = 1; switch (method) { case 1: str = 2; break; case 2: str = 3; break; case 3: str = 4; break; } return str; } #endregion #region 得到一周的周一和周日的日期 /// <summary> /// 计算本周的周一日期 /// </summary> /// <returns></returns> public static DateTime GetMondayDate() { return GetMondayDate(DateTime.Now); } /// <summary> /// 计算本周周日的日期 /// </summary> /// <returns></returns> public static DateTime GetSundayDate() { return GetSundayDate(DateTime.Now); } /// <summary> /// 计算某日起始日期(礼拜一的日期) /// </summary> /// <param name="someDate">该周中任意一天</param> /// <returns>返回礼拜一日期,后面的具体时、分、秒和传入值相等</returns> public static DateTime GetMondayDate(DateTime someDate) { int i = someDate.DayOfWeek - DayOfWeek.Monday; if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。 TimeSpan ts = new TimeSpan(i, 0, 0, 0); return someDate.Subtract(ts); } /// <summary> /// 计算某日结束日期(礼拜日的日期) /// </summary> /// <param name="someDate">该周中任意一天</param> /// <returns>返回礼拜日日期,后面的具体时、分、秒和传入值相等</returns> public static DateTime GetSundayDate(DateTime someDate) { int i = someDate.DayOfWeek - DayOfWeek.Sunday; if (i != 0) i = 7 - i;// 因为枚举原因,Sunday排在最前,相减间隔要被7减。 TimeSpan ts = new TimeSpan(i, 0, 0, 0); return someDate.Add(ts); } /// <summary> /// 根据星期几获得数字的星期几 /// </summary> /// <param name="weekName">例如周一:Monday</param> /// <returns></returns> public static int GetWeekByWeekName(string weekName) { var week = 1; switch (weekName) { case "Monday": week = 1; break; case "Tuesday": week = 2; break; case "Wednesday": week = 3; break; case "Thursday": week = 4; break; case "Friday": week = 5; break; case "Saturday": week = 6; break; case "Sunday": week = 7; break; } return week; } #endregion /// <summary> /// 时间戳转换为日期(时间戳单位秒) /// </summary> /// <param name="TimeStamp"></param> /// <returns></returns> public static DateTime ConvertToDateTime(long timeStamp) { var dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); TimeSpan toNow = new TimeSpan(timeStamp); return dtStart.Add(toNow); //var start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); //return start.AddMilliseconds(timeStamp).AddHours(8); } public static DateTime ConvertToDateTimeTrue(long timeStamp) { var start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return start.AddMilliseconds(timeStamp).AddHours(8); } /// <summary> /// 日期转换为时间戳(时间戳单位秒) /// </summary> /// <param name="TimeStamp"></param> /// <returns></returns> public static long ConvertToTimeStamp(DateTime time) { DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return (long)(time.AddHours(-8) - Jan1st1970).TotalMilliseconds; } /// <summary> /// 生成唯一数 /// </summary> public class UniqueData { private static object obj = new object(); private static int _sn = 0; public static string Gener() { lock (obj) { if (_sn == int.MaxValue) { _sn = 0; } else { _sn++; } //Thread.Sleep(100); return DateTime.Now.ToString("yyyyMMdd") + _sn.ToString().PadLeft(5, '0'); } } } #region 返回时间差 public static string DateDiff(DateTime DateTime1, DateTime DateTime2) { string dateDiff = null; try { //TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); //TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); //TimeSpan ts = ts1.Subtract(ts2).Duration(); TimeSpan ts = DateTime2 - DateTime1; if (ts.Days >= 1) { dateDiff = DateTime1.Month.ToString() + "月" + DateTime1.Day.ToString() + "日"; } else { if (ts.Hours > 1) { dateDiff = ts.Hours.ToString() + "小时前"; } else { dateDiff = ts.Minutes.ToString() + "分钟前"; } } } catch { } return dateDiff; } #endregion #region 社区返回用户等级颜色标识 /// <summary> /// 社区返回用户等级颜色标识 /// </summary> /// <param name="groupName"></param> /// <returns></returns> public static string GetAskGroupColor(string groupName) { var str = ""; switch (groupName) { case "普通用户": str = "04aad4"; break; case "专家": str = "ffbf00"; break; case "社区管理员": str = "a35429"; break; case "创始人": str = "780978"; break; default: str = "04aad4"; break; } return str; } #endregion /// <summary> /// 打乱数组的顺序 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public static List<T> RandomSort<T>(List<T> list) { var random = new Random(); var newList = new List<T>(); foreach (var item in list) { int s = random.Next(newList.Count); newList.Insert(s, item); } return newList; } }