/// <summary> /// 轉型為數值。 /// </summary> /// <param name="value">要轉型的值。</param> public static object CNum(object value) { // Null 傳回 0 if (IsNull(value)) { return(0); } // 針對文字型別做處理 if (value is string) { // 空字串傳回 0 if (StrFunc.StrIsEmpty(value)) { return(0); } // 若為數值先轉型為 Double 型別,防止有小數點無法轉型為整數 if (BaseFunc.IsNumeric(value)) { value = Convert.ToDouble(value); } } if (!BaseFunc.IsNumeric(value)) { throw new Exception(value + " 無法轉型為數值"); } return(value); }
/// <summary> /// 使用 SaltHash 演算法進行資料加密。 /// </summary> /// <param name="s">原字串。</param> /// <param name="key">加密鍵值。</param> public static string SaltHashEncrypt(string s, string key = "") { string sSalted = key; byte[] oOriginal = null; byte[] oSaltValue = null; byte[] oToSalt = null; MD5 oMD5 = null; byte[] oSaltPWD = null; byte[] oPWD = null; if (StrFunc.StrIsEmpty(sSalted)) { sSalted = "scskxmd"; } oOriginal = Encoding.Default.GetBytes(s); oSaltValue = Encoding.Default.GetBytes(sSalted); oToSalt = new byte[oOriginal.Length + oSaltValue.Length]; oOriginal.CopyTo(oToSalt, 0); oSaltValue.CopyTo(oToSalt, oOriginal.Length); oMD5 = MD5.Create(); oSaltPWD = oMD5.ComputeHash(oToSalt); oPWD = new byte[oSaltPWD.Length + oSaltValue.Length]; oSaltPWD.CopyTo(oPWD, 0); oSaltValue.CopyTo(oPWD, oSaltPWD.Length); return(Convert.ToBase64String(oPWD)); }
/// <summary> /// 字串解密。 /// </summary> /// <param name="str">加密的字串。</param> /// <param name="password">密碼。</param> public static string DESDecrypt(string str, string password) { DESCryptoServiceProvider oDESCrypto = null; int iLen = 0; int N1 = 0; int iByte = 0; System.IO.MemoryStream oMemoryStream = null; CryptoStream oCryptoStream = null; if (StrFunc.StrIsEmpty(str)) { return(string.Empty); } oDESCrypto = new DESCryptoServiceProvider(); //將字串放入 Byte 數組。 iLen = Convert.ToInt32(str.Length / 2) - 1; byte[] inputByteArray = new byte[iLen + 1]; for (N1 = 0; N1 <= iLen; N1++) { iByte = Convert.ToInt32(str.Substring(N1 * 2, 2), 16); inputByteArray[N1] = Convert.ToByte(iByte); } //建立加密對象的密碼和初始化向量 oDESCrypto.Key = ASCIIEncoding.ASCII.GetBytes(password); oDESCrypto.IV = ASCIIEncoding.ASCII.GetBytes(password); oMemoryStream = new System.IO.MemoryStream(); oCryptoStream = new CryptoStream(oMemoryStream, oDESCrypto.CreateDecryptor(), CryptoStreamMode.Write); oCryptoStream.Write(inputByteArray, 0, inputByteArray.Length); oCryptoStream.FlushFinalBlock(); return(Encoding.Default.GetString(oMemoryStream.ToArray())); }
/// <summary> /// DES字串解密(隨機密碼)。 /// </summary> /// <param name="str">加密的字串。</param> /// <param name="result">傳出是否解密成功。</param> public static string DESDecrypt(string str, out bool result) { string sPassword = string.Empty; string sEncrypt = string.Empty; string sDecrypt; string sValue; result = false; if (StrFunc.StrIsEmpty(str)) { return(string.Empty); } if (str.Length < 10) { return(str); } //密碼 sPassword = StrFunc.StrLeft(str, 2) + StrFunc.StrSubstring(str, 10, 4) + StrFunc.StrRight(str, 2); //加密字串 sValue = StrFunc.StrLeftRightCut(str, 2); sEncrypt = StrFunc.StrSubstring(sValue, 0, 8) + StrFunc.StrSubstring(sValue, 12, sValue.Length - 12); try { sDecrypt = DESDecrypt(sEncrypt, sPassword); result = true; return(sDecrypt); } catch { return(str); } }
/// <summary> /// 取得無 DbNull 的欄位值,組成以指定分隔符號分隔的字串 /// </summary> /// <param name="rows">資料列陣列</param> /// <param name="fieldName">欄位名稱</param> /// <param name="delimiter">分隔符號</param> /// <param name="checkEmpty">檢查空白</param> /// <returns></returns> public static string GetFieldValues(IEnumerable <DataRow> rows, string fieldName, string delimiter, bool checkEmpty = true) { var result = string.Empty; if (rows.Count() == 0 || !HasField(rows.First(), fieldName)) { return(result); } foreach (var row in rows) { if (row.RowState != DataRowState.Deleted) { var value = BaseFunc.CStr(GetFieldValueNotDbNull(row, fieldName)); if (checkEmpty && StrFunc.StrIsEmpty(value)) { continue; } result = result.StrMerge(value, delimiter); } } return(result); }
/// <summary> /// 取得無 DbNull 的欄位值,組成以逗號分隔的字串 /// </summary> /// <param name="rows">資料列陣列</param> /// <param name="fieldName">欄位名稱</param> /// <param name="checkEmpty">檢查空白</param> /// <param name="isSqlStr">是否用單引號包起來</param> /// <param name="distinct">是否過濾同樣資料</param> /// <returns></returns> public static string GetFieldValues(IEnumerable <DataRow> rows, string fieldName, bool checkEmpty = true, bool isSqlStr = true, bool distinct = false) { string result = string.Empty; if (rows.Count() != 0) { if (HasField(rows.First(), fieldName)) { foreach (DataRow row in rows) { if (row.RowState != DataRowState.Deleted) { string value = BaseFunc.CStr(GetFieldValueNotDbNull(row, fieldName)); if (checkEmpty && StrFunc.StrIsEmpty(value)) { continue; } else { value = isSqlStr ? StrFunc.SQLStr(value) : value; if (distinct && StrFunc.StrContains(result, value)) { continue; } result += (StrFunc.StrIsNotEmpty(result) ? "," : "") + value; } } } } } return(result); }
/// <summary> /// 是否為空值,Null 或 DBNull 皆視為空值。 /// </summary> /// <param name="value">要判斷的值。</param> public static bool IsEmpty(object value) { if (value is string) { return(StrFunc.StrIsEmpty(BaseFunc.CStr(value))); } else { return(IsNull(value)); } }
/// <summary> /// 判斷陣列所有成員都不是空字串。 /// </summary> /// <param name="args">字串陣列。</param> public static bool StrIsNotEmpty(params string[] args) { foreach (string s in args) { // 任何一個成員為空字串則傳回 false if (StrFunc.StrIsEmpty(s)) { return(false); } } return(true); }
/// <summary> /// 加入集合字串為成員。 /// </summary> /// <param name="s">字串。</param> /// <param name="delimiter">分隔符號。</param> public void Add(string s, string delimiter) { if (StrFunc.StrIsEmpty(s)) { return; } var values = StrFunc.StrSplit(s, delimiter); foreach (var value in values) { if (!this.Contains(value)) { this.Add(value); } } }
/// <summary> /// 字串轉16進位字串。 /// </summary> /// <param name="value">要轉的值。</param> public static string CHex(string value) { char[] oChars; string sReturnValue; if (StrFunc.StrIsEmpty(value)) { return(string.Empty); } sReturnValue = string.Empty; oChars = value.ToCharArray(); foreach (char letter in oChars) { sReturnValue += Convert.ToString(letter, 16); } return(sReturnValue); }
/// <summary> /// DES字串加密(隨機密碼)。 /// </summary> /// <param name="str">未加密的文字。</param> public static string DESEncrypt(string str) { string s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; string sPassword = string.Empty; string sEncrypt = string.Empty; //空字串無法加密,直接回傳空字串。 if (StrFunc.StrIsEmpty(str)) { return(string.Empty); } sPassword = BaseFunc.RndString(s, 8); sEncrypt = DESEncrypt(str, sPassword); //將密碼儲存於加密字串中 sEncrypt = StrFunc.StrLeft(sPassword, 2) + sEncrypt.Insert(8, StrFunc.StrSubstring(sPassword, 2, 4)) + StrFunc.StrRight(sPassword, 2); return(sEncrypt); }
/// <summary> /// 判斷是否為空字串,若為 null 也會視為空字串。 /// </summary> /// <param name="s"></param> /// <returns></returns> public static bool IsEmpty(this string s) { return(StrFunc.StrIsEmpty(s)); }