123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646 |
- using System;
- using System.Text;
- using System.Text.RegularExpressions;
- namespace Ant.Service.Utilities
- {
- /// <summary>
- /// 共用工具类
- /// </summary>
- public static class Tools
- {
- #region 获得用户IP
- /// <summary>
- /// 获得用户IP
- /// </summary>
- public static string GetUserIp()
- {
- string ip;
- string[] temp;
- bool isErr = false;
- if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"] == null)
- ip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
- else
- ip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"].ToString();
- if (ip.Length > 15)
- isErr = true;
- else
- {
- temp = ip.Split('.');
- if (temp.Length == 4)
- {
- for (int i = 0; i < temp.Length; i++)
- {
- if (temp[i].Length > 3) isErr = true;
- }
- }
- else
- isErr = true;
- }
- if (isErr)
- return "1.1.1.1";
- else
- return ip;
- }
- #endregion
- #region 根据配置对指定字符串进行 MD5 加密
- /// <summary>
- /// 根据配置对指定字符串进行 MD5 加密
- /// </summary>
- /// <param name="s"></param>
- /// <returns></returns>
- public static string GetMD5(string s)
- {
- //md5加密
- s = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5").ToString();
- return s.ToLower().Substring(8, 16);
- }
- #endregion
- #region 得到字符串长度,一个汉字长度为2
- /// <summary>
- /// 得到字符串长度,一个汉字长度为2
- /// </summary>
- /// <param name="inputString">参数字符串</param>
- /// <returns></returns>
- public static int StrLength(string inputString)
- {
- System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
- int tempLen = 0;
- byte[] s = ascii.GetBytes(inputString);
- for (int i = 0; i < s.Length; i++)
- {
- if ((int)s[i] == 63)
- tempLen += 2;
- else
- tempLen += 1;
- }
- return tempLen;
- }
- #endregion
- #region 截取指定长度字符串
- /// <summary>
- /// 截取指定长度字符串
- /// </summary>
- /// <param name="inputString">要处理的字符串</param>
- /// <param name="len">指定长度</param>
- /// <returns>返回处理后的字符串</returns>
- public static string ClipString(string inputString, int len)
- {
- bool isShowFix = false;
- if (len % 2 == 1)
- {
- isShowFix = true;
- len--;
- }
- System.Text.ASCIIEncoding ascii = new System.Text.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 (isShowFix && mybyte.Length > len)
- tempString += "…";
- return tempString;
- }
- #endregion
- #region 获得两个日期的间隔
- /// <summary>
- /// 获得两个日期的间隔
- /// </summary>
- /// <param name="DateTime1">日期一。</param>
- /// <param name="DateTime2">日期二。</param>
- /// <returns>日期间隔TimeSpan。</returns>
- public static TimeSpan DateDiff(DateTime DateTime1, DateTime DateTime2)
- {
- TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
- TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
- TimeSpan ts = ts1.Subtract(ts2).Duration();
- return ts;
- }
- #endregion
- #region 格式化日期时间
- /// <summary>
- /// 格式化日期时间
- /// </summary>
- /// <param name="dateTime1">日期时间</param>
- /// <param name="dateMode">显示模式</param>
- /// <returns>0-9种模式的日期</returns>
- public static string FormatDate(DateTime dateTime1, string dateMode)
- {
- switch (dateMode)
- {
- case "0":
- return dateTime1.ToString("yyyy-MM-dd");
- case "1":
- return dateTime1.ToString("yyyy-MM-dd HH:mm:ss");
- case "2":
- return dateTime1.ToString("yyyy/MM/dd");
- case "3":
- return dateTime1.ToString("yyyy年MM月dd日");
- case "4":
- return dateTime1.ToString("MM-dd");
- case "5":
- return dateTime1.ToString("MM/dd");
- case "6":
- return dateTime1.ToString("MM月dd日");
- case "7":
- return dateTime1.ToString("yyyy-MM");
- case "8":
- return dateTime1.ToString("yyyy/MM");
- case "9":
- return dateTime1.ToString("yyyy年MM月");
- default:
- return dateTime1.ToString();
- }
- }
- #endregion
- #region 得到随机日期
- /// <summary>
- /// 得到随机日期
- /// </summary>
- /// <param name="time1">起始日期</param>
- /// <param name="time2">结束日期</param>
- /// <returns>间隔日期之间的 随机日期</returns>
- public static DateTime GetRandomTime(DateTime time1, DateTime time2)
- {
- Random random = new Random();
- DateTime minTime = new DateTime();
- DateTime maxTime = new DateTime();
- System.TimeSpan ts = new System.TimeSpan(time1.Ticks - time2.Ticks);
- // 获取两个时间相隔的秒数
- double dTotalSecontds = ts.TotalSeconds;
- int iTotalSecontds = 0;
- if (dTotalSecontds > System.Int32.MaxValue)
- {
- iTotalSecontds = System.Int32.MaxValue;
- }
- else if (dTotalSecontds < System.Int32.MinValue)
- {
- iTotalSecontds = System.Int32.MinValue;
- }
- else
- {
- iTotalSecontds = (int)dTotalSecontds;
- }
- if (iTotalSecontds > 0)
- {
- minTime = time2;
- maxTime = time1;
- }
- else if (iTotalSecontds < 0)
- {
- minTime = time1;
- maxTime = time2;
- }
- else
- {
- return time1;
- }
- int maxValue = iTotalSecontds;
- if (iTotalSecontds <= System.Int32.MinValue)
- maxValue = System.Int32.MinValue + 1;
- int i = random.Next(System.Math.Abs(maxValue));
- return minTime.AddSeconds(i);
- }
- #endregion
- #region HTML转行成TEXT
- /// <summary>
- /// HTML转行成TEXT
- /// </summary>
- /// <param name="strHtml"></param>
- /// <returns></returns>
- public static string HtmlToTxt(string strHtml)
- {
- string[] aryReg ={
- @"<script[^>]*?>.*?</script>",
- @"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\[""'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>",
- @"([\r\n])[\s]+",
- @"&(quot|#34);",
- @"&(amp|#38);",
- @"&(lt|#60);",
- @"&(gt|#62);",
- @"&(nbsp|#160);",
- @"&(iexcl|#161);",
- @"&(cent|#162);",
- @"&(pound|#163);",
- @"&(copy|#169);",
- @"&#(\d+);",
- @"-->",
- @"<!--.*\n"
- };
- string newReg = aryReg[0];
- string strOutput = strHtml;
- for (int i = 0; i < aryReg.Length; i++)
- {
- Regex regex = new Regex(aryReg[i], RegexOptions.IgnoreCase);
- strOutput = regex.Replace(strOutput, string.Empty);
- }
- strOutput.Replace("<", "");
- strOutput.Replace(">", "");
- strOutput.Replace("\r\n", "");
- return strOutput;
- }
- #endregion
- #region 判断对象是否为空
- /// <summary>
- /// 判断对象是否为空,为空返回true
- /// </summary>
- /// <typeparam name="T">要验证的对象的类型</typeparam>
- /// <param name="data">要验证的对象</param>
- public static bool IsNullOrEmpty<T>(T data)
- {
- //如果为null
- if (data == null)
- {
- return true;
- }
- //如果为""
- if (data.GetType() == typeof(String))
- {
- if (string.IsNullOrEmpty(data.ToString().Trim()))
- {
- return true;
- }
- }
- //如果为DBNull
- if (data.GetType() == typeof(DBNull))
- {
- return true;
- }
- //不为空
- return false;
- }
- /// <summary>
- /// 判断对象是否为空,为空返回true
- /// </summary>
- /// <param name="data">要验证的对象</param>
- public static bool IsNullOrEmpty(object data)
- {
- //如果为null
- if (data == null)
- {
- return true;
- }
- //如果为""
- if (data.GetType() == typeof(String))
- {
- if (string.IsNullOrEmpty(data.ToString().Trim()))
- {
- return true;
- }
- }
- //如果为DBNull
- if (data.GetType() == typeof(DBNull))
- {
- return true;
- }
- //不为空
- return false;
- }
- #endregion
- #region 验证IP地址是否合法
- /// <summary>
- /// 验证IP地址是否合法
- /// </summary>
- /// <param name="ip">要验证的IP地址</param>
- public static bool IsIP(string ip)
- {
- //如果为空,认为验证合格
- if (IsNullOrEmpty(ip))
- {
- return true;
- }
- //清除要验证字符串中的空格
- ip = ip.Trim();
- //模式字符串
- string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$";
- //验证
- return RegexHelper.IsMatch(ip, pattern);
- }
- #endregion
- #region 验证EMail是否合法
- /// <summary>
- /// 验证EMail是否合法
- /// </summary>
- /// <param name="email">要验证的Email</param>
- public static bool IsEmail(string email)
- {
- //如果为空,认为验证不合格
- if (IsNullOrEmpty(email))
- {
- return false;
- }
- //清除要验证字符串中的空格
- email = email.Trim();
- //模式字符串
- string pattern = @"^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$";
- //验证
- return RegexHelper.IsMatch(email, pattern);
- }
- #endregion
- #region 验证是否为整数
- /// <summary>
- /// 验证是否为整数 如果为空,认为验证不合格 返回false
- /// </summary>
- /// <param name="number">要验证的整数</param>
- public static bool IsInt(string number)
- {
- //如果为空,认为验证不合格
- if (IsNullOrEmpty(number))
- {
- return false;
- }
- //清除要验证字符串中的空格
- number = number.Trim();
- //模式字符串
- string pattern = @"^[0-9]+[0-9]*$";
- //验证
- return RegexHelper.IsMatch(number, pattern);
- }
- #endregion
- #region 验证是否为数字
- /// <summary>
- /// 验证是否为数字
- /// </summary>
- /// <param name="number">要验证的数字</param>
- public static bool IsNumber(string number)
- {
- //如果为空,认为验证不合格
- if (IsNullOrEmpty(number))
- {
- return false;
- }
- //清除要验证字符串中的空格
- number = number.Trim();
- //模式字符串
- string pattern = @"^[0-9]+[0-9]*[.]?[0-9]*$";
- //验证
- return RegexHelper.IsMatch(number, pattern);
- }
- #endregion
- #region 验证日期是否合法
- /// <summary>
- /// 验证日期是否合法,对不规则的作了简单处理
- /// </summary>
- /// <param name="date">日期</param>
- public static bool IsDate(ref string date)
- {
- //如果为空,认为验证合格
- if (IsNullOrEmpty(date))
- {
- return true;
- }
- //清除要验证字符串中的空格
- date = date.Trim();
- //替换\
- date = date.Replace(@"\", "-");
- //替换/
- date = date.Replace(@"/", "-");
- //如果查找到汉字"今",则认为是当前日期
- if (date.IndexOf("今") != -1)
- {
- date = DateTime.Now.ToString();
- }
- try
- {
- //用转换测试是否为规则的日期字符
- date = Convert.ToDateTime(date).ToString("d");
- return true;
- }
- catch
- {
- //如果日期字符串中存在非数字,则返回false
- if (!IsInt(date))
- {
- return false;
- }
- #region 对纯数字进行解析
- //对8位纯数字进行解析
- if (date.Length == 8)
- {
- //获取年月日
- string year = date.Substring(0, 4);
- string month = date.Substring(4, 2);
- string day = date.Substring(6, 2);
- //验证合法性
- if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
- {
- return false;
- }
- if (Convert.ToInt32(month) > 12 || Convert.ToInt32(day) > 31)
- {
- return false;
- }
- //拼接日期
- date = Convert.ToDateTime(year + "-" + month + "-" + day).ToString("d");
- return true;
- }
- //对6位纯数字进行解析
- if (date.Length == 6)
- {
- //获取年月
- string year = date.Substring(0, 4);
- string month = date.Substring(4, 2);
- //验证合法性
- if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
- {
- return false;
- }
- if (Convert.ToInt32(month) > 12)
- {
- return false;
- }
- //拼接日期
- date = Convert.ToDateTime(year + "-" + month).ToString("d");
- return true;
- }
- //对5位纯数字进行解析
- if (date.Length == 5)
- {
- //获取年月
- string year = date.Substring(0, 4);
- string month = date.Substring(4, 1);
- //验证合法性
- if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
- {
- return false;
- }
- //拼接日期
- date = year + "-" + month;
- return true;
- }
- //对4位纯数字进行解析
- if (date.Length == 4)
- {
- //获取年
- string year = date.Substring(0, 4);
- //验证合法性
- if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
- {
- return false;
- }
- //拼接日期
- date = Convert.ToDateTime(year).ToString("d");
- return true;
- }
- #endregion
- return false;
- }
- }
- #endregion
- #region 验证身份证是否合法
- /// <summary>
- /// 验证身份证是否合法
- /// </summary>
- /// <param name="idCard">要验证的身份证</param>
- public static bool IsIdCard(string idCard)
- {
- //如果为空,认为验证合格
- if (IsNullOrEmpty(idCard))
- {
- return true;
- }
- //清除要验证字符串中的空格
- idCard = idCard.Trim();
- //模式字符串
- StringBuilder pattern = new StringBuilder();
- pattern.Append(@"^(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|");
- pattern.Append(@"50|51|52|53|54|61|62|63|64|65|71|81|82|91)");
- pattern.Append(@"(\d{13}|\d{15}[\dx])$");
- //验证
- return RegexHelper.IsMatch(idCard, pattern.ToString());
- }
- #endregion
- #region 检测客户的输入中是否有危险字符串
- /// <summary>
- /// 检测客户输入的字符串是否有效,并将原始字符串修改为有效字符串或空字符串。
- /// 当检测到客户的输入中有攻击性危险字符串,则返回false,有效返回true。
- /// </summary>
- /// <param name="input">要检测的字符串</param>
- public static bool IsValidInput(ref string input)
- {
- try
- {
- if (IsNullOrEmpty(input))
- {
- //如果是空值,则跳出
- return true;
- }
- else
- {
- //替换单引号
- input = input.Replace("'", "''").Trim();
- //检测攻击性危险字符串
- string testString = "and |or |exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare ";
- string[] testArray = testString.Split('|');
- foreach (string testStr in testArray)
- {
- if (input.ToLower().IndexOf(testStr) != -1)
- {
- //检测到攻击字符串,清空传入的值
- input = "";
- return false;
- }
- }
- //未检测到攻击字符串
- return true;
- }
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- #endregion
- }
- }
|