using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography; using System.Text.RegularExpressions;//正则表达式命名空间 namespace CCLB { /// <summary> #region 判断文本是否是数字(包括小数位的判断) /// <summary> /// 名称:IsNumber /// 判断是否数字函数1(推荐使用) /// </summary> /// <param name="text">需判断的文本或字符串 </param> /// <returns>返回true代表数字,否则为非数字 </returns> public static bool IsNumber(string text) { Regex objNotNumberPattern = new Regex("[^0-9.-]"); Regex objTwoDotPattern = new Regex("[0-9]*[.][0-9]*[.][0-9]*"); Regex objTwoMinusPattern = new Regex("[0-9]*[-][0-9]*[-][0-9]*"); String strValidRealPattern = "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$"; String strValidIntegerPattern = "^([-]|[0-9])[0-9]*$"; Regex objNumberPattern = new Regex("(" + strValidRealPattern + ")|(" + strValidIntegerPattern + ")"); return !objNotNumberPattern.IsMatch(text) && !objTwoDotPattern.IsMatch(text) && !objTwoMinusPattern.IsMatch(text) && objNumberPattern.IsMatch(text); } #endregion #region 对称加密解密 /// <summary> /// 名称:Encrypt /// DES对称加密函数1 /// </summary> /// <param name="str">需加密字符串 </param> /// <param name="pkey">密匙 </param> /// <returns>返回用指定密匙加密的字符串 </returns> public static string Encrypt(string str, string pkey) { try { byte[] bt = (new System.Text.UnicodeEncoding()).GetBytes(str); PasswordDeriveBytes pdb = new PasswordDeriveBytes(pkey, null); byte[] key = pdb.GetBytes(24); byte[] iv = pdb.GetBytes(8); MemoryStream ms = new MemoryStream(); TripleDESCryptoServiceProvider tdesc = new TripleDESCryptoServiceProvider(); CryptoStream cs = new CryptoStream(ms, tdesc.CreateEncryptor(key, iv), CryptoStreamMode.Write); cs.Write(bt, 0, bt.Length); cs.FlushFinalBlock(); return Convert.ToBase64String(ms.ToArray()); } catch (Exception ex) { throw ex; } } /// <summary> /// 名称:Decrypt /// DES对称加密函数1 /// </summary> /// <param name="str">需解密字符串 </param> /// <param name="pkey">密匙 </param> /// <returns>返回用指定密匙解密的字符串 </returns> public static string Decrypt(string str, string pkey) { try { byte[] bt = Convert.FromBase64String(str); PasswordDeriveBytes pdb = new PasswordDeriveBytes(pkey, null); byte[] key = pdb.GetBytes(24); byte[] iv = pdb.GetBytes(8); MemoryStream ms = new MemoryStream(); TripleDESCryptoServiceProvider tdesc = new TripleDESCryptoServiceProvider(); CryptoStream cs = new CryptoStream(ms, tdesc.CreateDecryptor(key, iv), CryptoStreamMode.Write); cs.Write(bt, 0, bt.Length); cs.FlushFinalBlock(); return (new System.Text.UnicodeEncoding()).GetString(ms.ToArray()); } catch (Exception ex) { throw ex; } } /// <summary> /// 名称:EncryptOne /// DES对称加密函数2 /// </summary> /// <param name="strPass">需加密字符串 </param> /// <param name="strKey">密匙 </param> /// <returns>返回用指定密匙加密的字符串 </returns> public static string EncryptOne(string strPass, string strKey) { int keyLen = strKey.Length; char[] strResult = strPass.ToCharArray(); for (int i = 0; i < strPass.Length; i++) { char chKey = strKey[i % keyLen]; if (i != 0) { if (strResult[i] != (char)(chKey ^ strResult[i - 1])) { strResult[i] = (char)(strResult[i] ^ chKey ^ strResult[i - 1]); } } else { if (strResult[i] != chKey) { strResult[i] = (char)(strResult[i] ^ chKey); } } } return new string(strResult); } /// <summary> /// 名称:DecryptOne /// DES对称解密函数2 /// </summary> /// <param name="strPass">需解密字符串 </param> /// <param name="strKey">密匙 </param> /// <returns>返回用指定密匙解密的字符串 </returns> public static string DecryptOne(string strPass, string strKey) { int keyLen = strKey.Length; char[] strResult = strPass.ToCharArray(); for (int i = strPass.Length - 1; i >= 0; i--) { char chKey = strKey[i % keyLen]; if (i != 0) { if (strResult[i] != (char)(chKey ^ strResult[i - 1])) { strResult[i] = (char)(strResult[i] ^ chKey ^ strResult[i - 1]); } } else { if (strResult[i] != chKey) { strResult[i] = (char)(strResult[i] ^ chKey); } } } return new string(strResult); } #endregion #region 非对称MD5加密 /// <summary> /// 名称:BBMD5 /// MD5非对称加密算法 /// </summary> /// <param name="str">需加密字符串 </param> /// <returns>返回加密字符串 </returns> public static string BBMD5(string str) { string pwd = ""; MD5 md5 = MD5.Create();//实例化一个md5对像 // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 for (int i = 0; i < s.Length; i++) { // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 pwd = pwd + s[i].ToString("X"); } return pwd; } #endregion #region 全汉字判断 /// <summary> /// 名称:IsAllChina /// 判断是否全是汉字组合 /// </summary> /// <param name="text">需判断的文本 </param> /// <returns>返回True为全是汉字组合 </returns> public static bool IsAllChina(string text) { foreach (char c in text.ToCharArray()) { if (Regex.IsMatch(c.ToString(), @"^[/u4e00-/u9fa5]+$") == false) { return false; } } return true; } #endregion #region 返回文本中的数字部分(适合double与int) /// <summary> /// 方法名称:GetDoubleNumber /// 功能:从数字和字母组合中返回带小数位的数字(移除非数字部分) /// </summary> /// <param name="text">所要进行处理的字符串 </param> /// <returns>返回double的数字 </returns> public static double GetDoubleNumber(string text) { double result = 0; if (text != null && text != string.Empty) { // 正则表达式剔除非数字字符(不包含小数点.) text = Regex.Replace(text, @"[^/d./d]", ""); // 如果是数字,则转换为int类型 if (Regex.IsMatch(text, @"^[+-]?/d*[.]?/d*$")) { result = double.Parse(text); } } return result; } /// <summary> /// 方法名称:GetIntNumber /// 功能:从数字和字母组合中返回整型数字(移除非数字部分) /// </summary> /// <param name="text">所要进行处理的字符串 </param> /// <returns>返回整型数字 </returns> public static int GetIntNumber(string text) { int result = 0; if (text != null && text != string.Empty) { // 正则表达式剔除非数字字符(不包含小数点.) text = Regex.Replace(text, @"[^/d./d]", ""); // 如果是数字,则转换为int类型 if (Regex.IsMatch(text, @"^[+-]?/d*[.]?/d*$")) { result = int.Parse(text); } } return result; } #endregion } }