Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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));
        }
Exemplo n.º 3
0
        /// <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()));
        }
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
 /// <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));
     }
 }
Exemplo n.º 8
0
 /// <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);
 }
Exemplo n.º 9
0
        /// <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);
                }
            }
        }
Exemplo n.º 10
0
        /// <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);
        }
Exemplo n.º 11
0
        /// <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);
        }
Exemplo n.º 12
0
 /// <summary>
 /// 判斷是否為空字串,若為 null 也會視為空字串。
 /// </summary>
 /// <param name="s"></param>
 /// <returns></returns>
 public static bool IsEmpty(this string s)
 {
     return(StrFunc.StrIsEmpty(s));
 }