Tools.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062
  1. using System;
  2. using System.Text;
  3. using System.Text.RegularExpressions;
  4. using System.Collections.Generic;
  5. using System.Reflection;
  6. using System.Web;
  7. using System.Web.Mvc;
  8. using System.ComponentModel;
  9. namespace Ant.Service.Common
  10. {
  11. /// <summary>
  12. /// 功能描述:共用工具类
  13. /// </summary>
  14. public static class Tools
  15. {
  16. #region 删除最后结尾的指定字符后的字符
  17. /// <summary>
  18. /// 删除最后结尾的指定字符后的字符
  19. /// </summary>
  20. public static string DelLastChar(string str, string strchar)
  21. {
  22. if (string.IsNullOrEmpty(str))
  23. return "";
  24. if (str.LastIndexOf(strchar) >= 0 && str.LastIndexOf(strchar) == str.Length - 1)
  25. {
  26. return str.Substring(0, str.LastIndexOf(strchar));
  27. }
  28. return str;
  29. }
  30. #endregion
  31. /// <summary>
  32.         /// 截取出身年月日
  33.         /// </summary>
  34.         /// <param name="IDCard">身份证号</param>
  35.         /// <returns></returns>
  36. public static string GetDate(string IDCard)
  37. {
  38. string BirthDay = " ";
  39. string strYear;
  40. string strMonth;
  41. string strDay;
  42. if (IDCard.Length == 15)
  43. {
  44. strYear = IDCard.Substring(6, 2);
  45. strMonth = IDCard.Substring(8, 2);
  46. strDay = IDCard.Substring(10, 2);
  47. BirthDay = "19" + strYear + "- " + strMonth + "- " + strDay;
  48. }
  49. if (IDCard.Length == 18)
  50. {
  51. strYear = IDCard.Substring(6, 4);
  52. strMonth = IDCard.Substring(10, 2);
  53. strDay = IDCard.Substring(12, 2);
  54. BirthDay = strYear + "- " + strMonth + "- " + strDay;
  55. }
  56. return BirthDay;
  57. }
  58. #region 获得用户IP
  59. /// <summary>
  60. /// 获得用户IP
  61. /// </summary>
  62. public static string GetUserIp()
  63. {
  64. string ip;
  65. string[] temp;
  66. bool isErr = false;
  67. if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"] == null)
  68. ip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
  69. else
  70. ip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"].ToString();
  71. if (ip.Length > 15)
  72. isErr = true;
  73. else
  74. {
  75. temp = ip.Split('.');
  76. if (temp.Length == 4)
  77. {
  78. for (int i = 0; i < temp.Length; i++)
  79. {
  80. if (temp[i].Length > 3) isErr = true;
  81. }
  82. }
  83. else
  84. isErr = true;
  85. }
  86. if (isErr)
  87. return "1.1.1.1";
  88. else
  89. return ip;
  90. }
  91. #endregion
  92. #region 根据配置对指定字符串进行 MD5 加密
  93. /// <summary>
  94. /// 根据配置对指定字符串进行 MD5 加密
  95. /// </summary>
  96. /// <param name="s"></param>
  97. /// <returns></returns>
  98. public static string GetMD5(string s)
  99. {
  100. //md5加密
  101. s = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5").ToString();
  102. return s.ToLower().Substring(8, 16);
  103. }
  104. #endregion
  105. #region 得到字符串长度,一个汉字长度为2
  106. /// <summary>
  107. /// 得到字符串长度,一个汉字长度为2
  108. /// </summary>
  109. /// <param name="inputString">参数字符串</param>
  110. /// <returns></returns>
  111. public static int StrLength(string inputString)
  112. {
  113. System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
  114. int tempLen = 0;
  115. byte[] s = ascii.GetBytes(inputString);
  116. for (int i = 0; i < s.Length; i++)
  117. {
  118. if ((int)s[i] == 63)
  119. tempLen += 2;
  120. else
  121. tempLen += 1;
  122. }
  123. return tempLen;
  124. }
  125. #endregion
  126. #region 截取指定长度字符串
  127. /// <summary>
  128. /// 截取指定长度字符串
  129. /// </summary>
  130. /// <param name="inputString">要处理的字符串</param>
  131. /// <param name="len">指定长度</param>
  132. /// <returns>返回处理后的字符串</returns>
  133. public static string ClipString(string inputString, int len)
  134. {
  135. bool isShowFix = false;
  136. if (len % 2 == 1)
  137. {
  138. isShowFix = true;
  139. len--;
  140. }
  141. System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
  142. int tempLen = 0;
  143. string tempString = "";
  144. byte[] s = ascii.GetBytes(inputString);
  145. for (int i = 0; i < s.Length; i++)
  146. {
  147. if ((int)s[i] == 63)
  148. tempLen += 2;
  149. else
  150. tempLen += 1;
  151. try
  152. {
  153. tempString += inputString.Substring(i, 1);
  154. }
  155. catch
  156. {
  157. break;
  158. }
  159. if (tempLen > len)
  160. break;
  161. }
  162. byte[] mybyte = System.Text.Encoding.Default.GetBytes(inputString);
  163. if (isShowFix && mybyte.Length > len)
  164. tempString += "…";
  165. return tempString;
  166. }
  167. #endregion
  168. #region 获得两个日期的间隔
  169. /// <summary>
  170. /// 获得两个日期的间隔
  171. /// </summary>
  172. /// <param name="DateTime1">日期一。</param>
  173. /// <param name="DateTime2">日期二。</param>
  174. /// <returns>日期间隔TimeSpan。</returns>
  175. public static TimeSpan DateDiff(DateTime DateTime1, DateTime DateTime2)
  176. {
  177. TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
  178. TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
  179. TimeSpan ts = ts1.Subtract(ts2).Duration();
  180. return ts;
  181. }
  182. #endregion
  183. #region 格式化日期时间
  184. /// <summary>
  185. /// 格式化日期时间
  186. /// </summary>
  187. /// <param name="dateTime1">日期时间</param>
  188. /// <param name="dateMode">显示模式</param>
  189. /// <returns>0-9种模式的日期</returns>
  190. public static string FormatDate(DateTime dateTime1, string dateMode)
  191. {
  192. switch (dateMode)
  193. {
  194. case "0":
  195. return dateTime1.ToString("yyyy-MM-dd");
  196. case "1":
  197. return dateTime1.ToString("yyyy-MM-dd HH:mm:ss");
  198. case "2":
  199. return dateTime1.ToString("yyyy/MM/dd");
  200. case "3":
  201. return dateTime1.ToString("yyyy年MM月dd日");
  202. case "4":
  203. return dateTime1.ToString("MM-dd");
  204. case "5":
  205. return dateTime1.ToString("MM/dd");
  206. case "6":
  207. return dateTime1.ToString("MM月dd日");
  208. case "7":
  209. return dateTime1.ToString("yyyy-MM");
  210. case "8":
  211. return dateTime1.ToString("yyyy/MM");
  212. case "9":
  213. return dateTime1.ToString("yyyy年MM月");
  214. default:
  215. return dateTime1.ToString();
  216. }
  217. }
  218. #endregion
  219. #region 得到随机日期
  220. /// <summary>
  221. /// 得到随机日期
  222. /// </summary>
  223. /// <param name="time1">起始日期</param>
  224. /// <param name="time2">结束日期</param>
  225. /// <returns>间隔日期之间的 随机日期</returns>
  226. public static DateTime GetRandomTime(DateTime time1, DateTime time2)
  227. {
  228. Random random = new Random();
  229. DateTime minTime = new DateTime();
  230. DateTime maxTime = new DateTime();
  231. System.TimeSpan ts = new System.TimeSpan(time1.Ticks - time2.Ticks);
  232. // 获取两个时间相隔的秒数
  233. double dTotalSecontds = ts.TotalSeconds;
  234. int iTotalSecontds = 0;
  235. if (dTotalSecontds > System.Int32.MaxValue)
  236. {
  237. iTotalSecontds = System.Int32.MaxValue;
  238. }
  239. else if (dTotalSecontds < System.Int32.MinValue)
  240. {
  241. iTotalSecontds = System.Int32.MinValue;
  242. }
  243. else
  244. {
  245. iTotalSecontds = (int)dTotalSecontds;
  246. }
  247. if (iTotalSecontds > 0)
  248. {
  249. minTime = time2;
  250. maxTime = time1;
  251. }
  252. else if (iTotalSecontds < 0)
  253. {
  254. minTime = time1;
  255. maxTime = time2;
  256. }
  257. else
  258. {
  259. return time1;
  260. }
  261. int maxValue = iTotalSecontds;
  262. if (iTotalSecontds <= System.Int32.MinValue)
  263. maxValue = System.Int32.MinValue + 1;
  264. int i = random.Next(System.Math.Abs(maxValue));
  265. return minTime.AddSeconds(i);
  266. }
  267. /// <summary>
  268. /// 获取时间戳
  269. /// </summary>
  270. public static string GetRandomTimeSpan()
  271. {
  272. TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
  273. return Convert.ToInt64(ts.TotalSeconds).ToString();
  274. }
  275. #endregion
  276. #region HTML转行成TEXT
  277. /// <summary>
  278. /// HTML转行成TEXT
  279. /// </summary>
  280. /// <param name="strHtml"></param>
  281. /// <returns></returns>
  282. public static string HtmlToTxt(string strHtml)
  283. {
  284. string[] aryReg ={
  285. @"<script[^>]*?>.*?</script>",
  286. @"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\[""'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>",
  287. @"([\r\n])[\s]+",
  288. @"&(quot|#34);",
  289. @"&(amp|#38);",
  290. @"&(lt|#60);",
  291. @"&(gt|#62);",
  292. @"&(nbsp|#160);",
  293. @"&(iexcl|#161);",
  294. @"&(cent|#162);",
  295. @"&(pound|#163);",
  296. @"&(copy|#169);",
  297. @"&#(\d+);",
  298. @"-->",
  299. @"<!--.*\n"
  300. };
  301. string newReg = aryReg[0];
  302. string strOutput = strHtml;
  303. for (int i = 0; i < aryReg.Length; i++)
  304. {
  305. Regex regex = new Regex(aryReg[i], RegexOptions.IgnoreCase);
  306. strOutput = regex.Replace(strOutput, string.Empty);
  307. }
  308. strOutput.Replace("<", "");
  309. strOutput.Replace(">", "");
  310. strOutput.Replace("\r\n", "");
  311. return strOutput;
  312. }
  313. #endregion
  314. #region 判断对象是否为空
  315. /// <summary>
  316. /// 判断对象是否为空,为空返回true
  317. /// </summary>
  318. /// <typeparam name="T">要验证的对象的类型</typeparam>
  319. /// <param name="data">要验证的对象</param>
  320. public static bool IsNullOrEmpty<T>(this T data)
  321. {
  322. //如果为null
  323. if (data == null)
  324. {
  325. return true;
  326. }
  327. //如果为""
  328. if (data.GetType() == typeof(String))
  329. {
  330. if (string.IsNullOrEmpty(data.ToString().Trim()) || data.ToString() == "")
  331. {
  332. return true;
  333. }
  334. }
  335. //如果为DBNull
  336. if (data.GetType() == typeof(DBNull))
  337. {
  338. return true;
  339. }
  340. //不为空
  341. return false;
  342. }
  343. /// <summary>
  344. /// 判断对象是否为空,为空返回true
  345. /// </summary>
  346. /// <param name="data">要验证的对象</param>
  347. public static bool IsNullOrEmpty(this object data)
  348. {
  349. //如果为null
  350. if (data == null)
  351. {
  352. return true;
  353. }
  354. //如果为""
  355. if (data.GetType() == typeof(String))
  356. {
  357. if (string.IsNullOrEmpty(data.ToString().Trim()))
  358. {
  359. return true;
  360. }
  361. }
  362. //如果为DBNull
  363. if (data.GetType() == typeof(DBNull))
  364. {
  365. return true;
  366. }
  367. //不为空
  368. return false;
  369. }
  370. #endregion
  371. #region 验证IP地址是否合法
  372. /// <summary>
  373. /// 验证IP地址是否合法
  374. /// </summary>
  375. /// <param name="ip">要验证的IP地址</param>
  376. public static bool IsIP(string ip)
  377. {
  378. //如果为空,认为验证合格
  379. if (IsNullOrEmpty(ip))
  380. {
  381. return true;
  382. }
  383. //清除要验证字符串中的空格
  384. ip = ip.Trim();
  385. //模式字符串
  386. string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$";
  387. //验证
  388. return RegexHelper.IsMatch(ip, pattern);
  389. }
  390. #endregion
  391. #region 验证EMail是否合法
  392. /// <summary>
  393. /// 验证EMail是否合法
  394. /// </summary>
  395. /// <param name="email">要验证的Email</param>
  396. public static bool IsEmail(string email)
  397. {
  398. //如果为空,认为验证不合格
  399. if (IsNullOrEmpty(email))
  400. {
  401. return false;
  402. }
  403. //清除要验证字符串中的空格
  404. email = email.Trim();
  405. //模式字符串
  406. 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})$";
  407. //验证
  408. return RegexHelper.IsMatch(email, pattern);
  409. }
  410. #endregion
  411. #region 验证是否为浮点数
  412. /// <summary>
  413. /// 验证是否浮点数
  414. /// </summary>
  415. /// <param name="floatNum"></param>
  416. /// <returns></returns>
  417. public static bool IsFloat(this string floatNum)
  418. {
  419. //如果为空,认为验证不合格
  420. if (IsNullOrEmpty(floatNum))
  421. {
  422. return false;
  423. }
  424. //清除要验证字符串中的空格
  425. floatNum = floatNum.Trim();
  426. //模式字符串
  427. string pattern = @"^(-?\d+)(\.\d+)?$";
  428. //验证
  429. return RegexHelper.IsMatch(floatNum, pattern);
  430. }
  431. #endregion
  432. #region 验证是否为整数
  433. /// <summary>
  434. /// 验证是否为整数 如果为空,认为验证不合格 返回false
  435. /// </summary>
  436. /// <param name="number">要验证的整数</param>
  437. public static bool IsInt(this string number)
  438. {
  439. //如果为空,认为验证不合格
  440. if (IsNullOrEmpty(number))
  441. {
  442. return false;
  443. }
  444. //清除要验证字符串中的空格
  445. number = number.Trim();
  446. //模式字符串
  447. string pattern = @"^[0-9]+[0-9]*$";
  448. //验证
  449. return RegexHelper.IsMatch(number, pattern);
  450. }
  451. #endregion
  452. #region 验证是否为数字
  453. /// <summary>
  454. /// 验证是否为数字
  455. /// </summary>
  456. /// <param name="number">要验证的数字</param>
  457. public static bool IsNumber(this string number)
  458. {
  459. //如果为空,认为验证不合格
  460. if (IsNullOrEmpty(number))
  461. {
  462. return false;
  463. }
  464. //清除要验证字符串中的空格
  465. number = number.Trim();
  466. //模式字符串
  467. string pattern = @"^[0-9]+[0-9]*[.]?[0-9]*$";
  468. //验证
  469. return RegexHelper.IsMatch(number, pattern);
  470. }
  471. #endregion
  472. #region 验证日期是否合法
  473. /// <summary>
  474. /// 是否是日期
  475. /// </summary>
  476. /// <param name="date"></param>
  477. /// <returns></returns>
  478. public static bool IsDate(this object date)
  479. {
  480. //如果为空,认为验证合格
  481. if (IsNullOrEmpty(date))
  482. {
  483. return false;
  484. }
  485. string strdate = date.ToString();
  486. try
  487. {
  488. //用转换测试是否为规则的日期字符
  489. date = Convert.ToDateTime(date).ToString("d");
  490. return true;
  491. }
  492. catch
  493. {
  494. //如果日期字符串中存在非数字,则返回false
  495. if (!IsInt(strdate))
  496. {
  497. return false;
  498. }
  499. #region 对纯数字进行解析
  500. //对8位纯数字进行解析
  501. if (strdate.Length == 8)
  502. {
  503. //获取年月日
  504. string year = strdate.Substring(0, 4);
  505. string month = strdate.Substring(4, 2);
  506. string day = strdate.Substring(6, 2);
  507. //验证合法性
  508. if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
  509. {
  510. return false;
  511. }
  512. if (Convert.ToInt32(month) > 12 || Convert.ToInt32(day) > 31)
  513. {
  514. return false;
  515. }
  516. //拼接日期
  517. date = Convert.ToDateTime(year + "-" + month + "-" + day).ToString("d");
  518. return true;
  519. }
  520. //对6位纯数字进行解析
  521. if (strdate.Length == 6)
  522. {
  523. //获取年月
  524. string year = strdate.Substring(0, 4);
  525. string month = strdate.Substring(4, 2);
  526. //验证合法性
  527. if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
  528. {
  529. return false;
  530. }
  531. if (Convert.ToInt32(month) > 12)
  532. {
  533. return false;
  534. }
  535. //拼接日期
  536. date = Convert.ToDateTime(year + "-" + month).ToString("d");
  537. return true;
  538. }
  539. //对5位纯数字进行解析
  540. if (strdate.Length == 5)
  541. {
  542. //获取年月
  543. string year = strdate.Substring(0, 4);
  544. string month = strdate.Substring(4, 1);
  545. //验证合法性
  546. if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
  547. {
  548. return false;
  549. }
  550. //拼接日期
  551. date = year + "-" + month;
  552. return true;
  553. }
  554. //对4位纯数字进行解析
  555. if (strdate.Length == 4)
  556. {
  557. //获取年
  558. string year = strdate.Substring(0, 4);
  559. //验证合法性
  560. if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
  561. {
  562. return false;
  563. }
  564. //拼接日期
  565. date = Convert.ToDateTime(year).ToString("d");
  566. return true;
  567. }
  568. #endregion
  569. return false;
  570. }
  571. }
  572. /// <summary>
  573. /// 验证日期是否合法,对不规则的作了简单处理
  574. /// </summary>
  575. /// <param name="date">日期</param>
  576. public static bool IsDate(ref string date)
  577. {
  578. //如果为空,认为验证合格
  579. if (IsNullOrEmpty(date))
  580. {
  581. return true;
  582. }
  583. //清除要验证字符串中的空格
  584. date = date.Trim();
  585. //替换\
  586. date = date.Replace(@"\", "-");
  587. //替换/
  588. date = date.Replace(@"/", "-");
  589. //如果查找到汉字"今",则认为是当前日期
  590. if (date.IndexOf("今") != -1)
  591. {
  592. date = DateTime.Now.ToString();
  593. }
  594. try
  595. {
  596. //用转换测试是否为规则的日期字符
  597. date = Convert.ToDateTime(date).ToString("d");
  598. return true;
  599. }
  600. catch
  601. {
  602. //如果日期字符串中存在非数字,则返回false
  603. if (!IsInt(date))
  604. {
  605. return false;
  606. }
  607. #region 对纯数字进行解析
  608. //对8位纯数字进行解析
  609. if (date.Length == 8)
  610. {
  611. //获取年月日
  612. string year = date.Substring(0, 4);
  613. string month = date.Substring(4, 2);
  614. string day = date.Substring(6, 2);
  615. //验证合法性
  616. if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
  617. {
  618. return false;
  619. }
  620. if (Convert.ToInt32(month) > 12 || Convert.ToInt32(day) > 31)
  621. {
  622. return false;
  623. }
  624. //拼接日期
  625. date = Convert.ToDateTime(year + "-" + month + "-" + day).ToString("d");
  626. return true;
  627. }
  628. //对6位纯数字进行解析
  629. if (date.Length == 6)
  630. {
  631. //获取年月
  632. string year = date.Substring(0, 4);
  633. string month = date.Substring(4, 2);
  634. //验证合法性
  635. if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
  636. {
  637. return false;
  638. }
  639. if (Convert.ToInt32(month) > 12)
  640. {
  641. return false;
  642. }
  643. //拼接日期
  644. date = Convert.ToDateTime(year + "-" + month).ToString("d");
  645. return true;
  646. }
  647. //对5位纯数字进行解析
  648. if (date.Length == 5)
  649. {
  650. //获取年月
  651. string year = date.Substring(0, 4);
  652. string month = date.Substring(4, 1);
  653. //验证合法性
  654. if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
  655. {
  656. return false;
  657. }
  658. //拼接日期
  659. date = year + "-" + month;
  660. return true;
  661. }
  662. //对4位纯数字进行解析
  663. if (date.Length == 4)
  664. {
  665. //获取年
  666. string year = date.Substring(0, 4);
  667. //验证合法性
  668. if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
  669. {
  670. return false;
  671. }
  672. //拼接日期
  673. date = Convert.ToDateTime(year).ToString("d");
  674. return true;
  675. }
  676. #endregion
  677. return false;
  678. }
  679. }
  680. #endregion
  681. #region 验证身份证是否合法
  682. /// <summary>
  683. /// 验证身份证是否合法
  684. /// </summary>
  685. /// <param name="idCard">要验证的身份证</param>
  686. public static bool IsIdCard(string idCard)
  687. {
  688. //如果为空,认为验证合格
  689. if (IsNullOrEmpty(idCard))
  690. {
  691. return true;
  692. }
  693. //清除要验证字符串中的空格
  694. idCard = idCard.Trim();
  695. //模式字符串
  696. StringBuilder pattern = new StringBuilder();
  697. pattern.Append(@"^(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|");
  698. pattern.Append(@"50|51|52|53|54|61|62|63|64|65|71|81|82|91)");
  699. pattern.Append(@"(\d{13}|\d{15}[\dx])$");
  700. //验证
  701. return RegexHelper.IsMatch(idCard, pattern.ToString());
  702. }
  703. #endregion
  704. #region 检测客户的输入中是否有危险字符串
  705. /// <summary>
  706. /// 检测客户输入的字符串是否有效,并将原始字符串修改为有效字符串或空字符串。
  707. /// 当检测到客户的输入中有攻击性危险字符串,则返回false,有效返回true。
  708. /// </summary>
  709. /// <param name="input">要检测的字符串</param>
  710. /// <param name="IsNullValid">是否需要做非空判断,true表示要,false表示不要</param>
  711. public static bool IsValidInput(ref string input, bool IsNullValid)
  712. {
  713. if (IsNullValid == false)
  714. {
  715. return true;
  716. }
  717. try
  718. {
  719. if (IsNullValid && IsNullOrEmpty(input))
  720. {
  721. //如果是空值,则跳出
  722. return false;
  723. }
  724. else
  725. {
  726. //替换单引号
  727. input = input.Replace("'", "''").Trim();
  728. //检测攻击性危险字符串
  729. string testString = "and |or |exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare ";
  730. string[] testArray = testString.Split('|');
  731. foreach (string testStr in testArray)
  732. {
  733. if (input.ToLower().IndexOf(testStr) != -1)
  734. {
  735. //检测到攻击字符串,清空传入的值
  736. input = "";
  737. return false;
  738. }
  739. }
  740. //未检测到攻击字符串
  741. return true;
  742. }
  743. }
  744. catch (Exception ex)
  745. {
  746. throw new Exception(ex.Message);
  747. }
  748. }
  749. #endregion
  750. /// <summary>
  751. /// //前台显示邮箱的掩码替换(由tzh@qq.com等替换成t*****@qq.com)
  752. /// </summary>
  753. /// <param name="Email">邮箱</param>
  754. /// <returns></returns>
  755. public static string GetEmail(string Email)
  756. {
  757. string strArg = "";
  758. string SendEmail = "";
  759. Match match = Regex.Match(Email, @"(\w)\w+@");
  760. if (match.Success)
  761. {
  762. strArg = match.Groups[1].Value + "*****@";
  763. SendEmail = Regex.Replace(Email, @"\w+@", strArg);
  764. }
  765. else
  766. SendEmail = Email;
  767. return SendEmail;
  768. }
  769. /// <summary>
  770. /// 检查字符串是否存在与一个,组合到一起的字符串数组中
  771. /// </summary>
  772. /// <param name="strSplit">未分割的字符串</param>
  773. /// <param name="split">分割符号</param>
  774. /// <param name="targetValue">目标字符串</param>
  775. /// <returns></returns>
  776. public static bool CheckStringHasValue(string strSplit, char split, string targetValue)
  777. {
  778. string[] strList = strSplit.Split(split);
  779. foreach (string str in strList)
  780. {
  781. if (targetValue == str)
  782. return true;
  783. }
  784. return false;
  785. }
  786. #region 枚举型相关操作
  787. /// <summary>
  788. /// 功能描述;获取枚举名称.传入枚举类型和枚举值
  789. /// 创建标识:徐戈
  790. /// </summary>
  791. /// <param name="enumType"></param>
  792. /// <param name="intEnumValue"></param>
  793. /// <returns></returns>
  794. public static string GetEnumText<T>(int intEnumValue)
  795. {
  796. return Enum.GetName(typeof(T), intEnumValue);
  797. }
  798. /// <summary>
  799. /// 功能描述:获取枚举项集合,传入枚举类型
  800. /// 创建标识:add by 季健国 2013-8-23 9:38
  801. /// </summary>
  802. /// <typeparam name="T"></typeparam>
  803. /// <returns></returns>
  804. public static IList<object> BindEnums<T>()
  805. {
  806. IList<object> _list = new List<object>();
  807. //遍历枚举集合
  808. foreach (int i in Enum.GetValues(typeof(T)))
  809. {
  810. var _selItem = new
  811. {
  812. Value = i,
  813. Text = Enum.GetName(typeof(T), i)
  814. };
  815. _list.Add(_selItem);
  816. }
  817. return _list;
  818. }
  819. ///<summary>
  820. /// 返回 Dic 枚举项,描述
  821. ///</summary>
  822. ///<param name="enumType"></param>
  823. ///<returns>Dic枚举项,描述</returns>
  824. public static Dictionary<string, string> BindEnums(Type enumType)
  825. {
  826. Dictionary<string, string> dic = new Dictionary<string, string>();
  827. FieldInfo[] fieldinfos = enumType.GetFields();
  828. foreach (FieldInfo field in fieldinfos)
  829. {
  830. if (field.FieldType.IsEnum)
  831. {
  832. Object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
  833. dic.Add(field.Name, ((DescriptionAttribute)objs[0]).Description);
  834. }
  835. }
  836. return dic;
  837. }
  838. ///<summary>
  839. /// 返回 List《Enums.EnumsClass》 枚举值、名称、描述
  840. ///</summary>
  841. public static List<Enums.EnumsClass> BindEnumsList(Type enumType)
  842. {
  843. var list = new List<Enums.EnumsClass>();
  844. FieldInfo[] fieldinfos = enumType.GetFields();
  845. var enumvalue = Enum.GetValues(enumType);
  846. foreach (FieldInfo field in fieldinfos)
  847. {
  848. if (field.FieldType.IsEnum)
  849. {
  850. int ev = -1;
  851. Object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
  852. foreach (int item in enumvalue)
  853. {
  854. if (Enum.GetName(enumType, item) == field.Name)
  855. {
  856. ev = item;
  857. break;
  858. }
  859. }
  860. list.Add(new Enums.EnumsClass
  861. {
  862. Name = field.Name,
  863. Value = ev,
  864. Text = objs.Length > 0 ? ((DescriptionAttribute)objs[0]).Description : field.Name
  865. }); ;
  866. }
  867. }
  868. return list;
  869. }
  870. #endregion
  871. #region 获取集合中某个字段的拼接,例:获取姓名拼接
  872. /// <summary>
  873. /// 功能描述:获取集合中某个字段的拼接,例:获取姓名拼接
  874. /// 创建标识:徐戈
  875. /// </summary>
  876. /// <typeparam name="T"></typeparam>
  877. /// <param name="list">集合</param>
  878. /// <param name="strFieldName">字段名</param>
  879. /// <param name="strSplit">分隔符</param>
  880. /// <returns></returns>
  881. public static string GetFieldValueJoin<T>(IList<T> list, string strFieldName, string strSplit)
  882. {
  883. //判断入口
  884. if (list == null || list.Count <= 0 || string.IsNullOrEmpty(strFieldName))
  885. return string.Empty;
  886. //获取属性
  887. PropertyInfo _pro = typeof(T).GetProperty(strFieldName);
  888. if (_pro == null)
  889. return string.Empty;
  890. //变量,记录返回值
  891. string _strReturn = string.Empty;
  892. foreach (T _entityI in list)
  893. {
  894. //获取属性值
  895. object _objValue = _pro.GetValue(_entityI, null);
  896. if (_objValue == null || string.IsNullOrEmpty(_objValue.ToString()))
  897. //没有属性值,则跳过
  898. continue;
  899. //有属性值,则拼接
  900. _strReturn += _objValue.ToString() + strSplit;
  901. }
  902. if (string.IsNullOrEmpty(_strReturn))
  903. return string.Empty;
  904. return _strReturn.Substring(0, _strReturn.Length - strSplit.Length);
  905. }
  906. #endregion
  907. #region 操作Cookie
  908. /// <summary>
  909. /// 功能描述:保存Cookie
  910. /// 创建标识:徐戈
  911. /// </summary>
  912. /// <param name="strKey"></param>
  913. /// <param name="strValue"></param>
  914. public static void SaveCookie(string strCookieKey, string strValue)
  915. {
  916. //写入Cookie
  917. HttpContext.Current.Response.Cookies[strCookieKey].Value = strValue;
  918. HttpContext.Current.Response.Cookies[strCookieKey].Expires = DateTime.MaxValue;
  919. }
  920. /// <summary>
  921. /// 功能描述:获取Cookie
  922. /// 创建标识:徐戈
  923. /// </summary>
  924. /// <param name="emCookieKey"></param>
  925. /// <returns></returns>
  926. public static string GetCookie(string strCookieKey)
  927. {
  928. try
  929. {
  930. //获取emCookieKey枚举对应的名称
  931. return HttpContext.Current.Request.Cookies[strCookieKey].Value;
  932. }
  933. catch //(Exception ex)
  934. {
  935. return string.Empty;
  936. }
  937. }
  938. #endregion
  939. }
  940. }