예제 #1
0
        /// <summary>
        /// 组合后缀生成唯一ID
        /// </summary>
        /// <param name="uctTimeNow">时间</param>
        /// <param name="suffix">后缀只能是由26个字母加数字组成</param>
        /// <param name="fixLen">固定长度</param>
        /// <returns></returns>
        public static string MakeTradeNo(DateTime UctTimeNow, string suffix, int fixLen)
        {
            Thread.Sleep(1);
            if (fixLen < 17)
            {
                fixLen = 17;
            }
            string text = UctTimeNow.ToString("yyMMddHHmmssfffff");
            string str  = string.Empty;

            if (!string.IsNullOrEmpty(suffix))
            {
                suffix = RegExMatch.RegexReplace(suffix, "[^A-Za-z0-9]+", "", true);
                try
                {
                    str = AnyRadixConvert.AryConvert(suffix, 36, 10);
                }
                catch
                {
                    str = string.Empty;
                }
            }
            text += str;
            int length = text.Length;

            if (length > fixLen)            //大于指定的长度
            {
                return(text.Substring(0, fixLen));
            }
            else if (length < fixLen)            //小于指定的长度
            {
                text = string.Format("{0}{1}", text, AnyRadixConvert.GetRandomNum(fixLen - length));
            }
            return(text);
        }
        /// <summary>
        /// 将指定基数的数字的 System.String 表示形式转换为等效的 64 位有符号整数。
        /// </summary>
        /// <param name="value">包含数字的 System.String。</param>
        /// <param name="fromBase">value 中数字的基数,它必须是[2,36]</param>
        /// <returns>等效于 value 中的数字的 64 位有符号整数。- 或 - 如果 value 为 null,则为零。</returns>
        private static long StringToLong(string value, int fromBase)
        {
            value = value != null?value.Trim() : null;

            if (string.IsNullOrEmpty(value))
            {
                return(0L);
            }
            string text = new string(m_rDigits, 0, fromBase);
            long   num  = 0L;

            value = value.ToUpper();
            for (int i = 0; i < value.Length; i++)
            {
                if (!text.Contains(value[i].ToString()))
                {
                    throw new ArgumentException(string.Format("The argument \"{0}\" is not in {1} system.", value[i], fromBase));
                }
                try
                {
                    num += (long)Math.Pow((double)fromBase, (double)i) * (long)AnyRadixConvert.GetCharIndex(AnyRadixConvert.m_rDigits, value[value.Length - i - 1]);
                }
                catch
                {
                    throw new OverflowException("运算溢出.");
                }
            }
            return(num);
        }
예제 #3
0
        /// <summary>
        /// 生成基础资料ID
        /// </summary>
        /// <param name="uctTimeNow">时间</param>
        /// <param name="suffix">后缀只能是由26个字母加数字组成</param>
        /// <param name="fixLen">固定长度</param>
        /// <returns></returns>
        public static string MakeBaseDataId(DateTime uctTimeNow, string suffix, int fixLen)
        {
            Thread.Sleep(1);
            string text   = string.Format("{0}{1}", uctTimeNow.Ticks.ToString(), suffix);
            int    length = text.Length;

            if (length > fixLen)            //大于指定的长度
            {
                text = text.Substring(0, fixLen);
            }
            else if (length < fixLen)            //小于指定的长度
            {
                text = string.Format("{0}{1}", text, AnyRadixConvert.GetRandomNum(fixLen - length));
            }
            return(text);
        }
 /// <summary>
 /// 任意进制转换,将fromBase进制表示的value转换为toBase进制
 /// </summary>
 /// <param name="value"></param>
 /// <param name="fromBase">原来进制(2-36进制)</param>
 /// <param name="toBase">转换后的进制(2-36进制)</param>
 /// <returns></returns>
 public static string AryConvert(string value, int fromBase, int toBase)
 {
     if (string.IsNullOrEmpty(value.Trim()))
     {
         return(string.Empty);
     }
     if (fromBase < 2 || fromBase > 36)
     {
         throw new ArgumentException(string.Format("The fromBase radix \"{0}\" is not in the range 2..36.", fromBase));
     }
     if (toBase < 2 || toBase > 36)
     {
         throw new ArgumentException(string.Format("The toBase radix \"{0}\" is not in the range 2..36.", toBase));
     }
     return(AnyRadixConvert.LongToString(AnyRadixConvert.StringToLong(value, fromBase), toBase));
 }