zoukankan      html  css  js  c++  java
  • 大数字字符串转换为短字符串(7位转4位)

    /// <summary>
        /// 将数值字符串加密为短字符串
        /// </summary>
        public static class NumberToShortString
        {
            /// <summary>
            /// 共62个字符
            /// </summary>
            private static readonly string Keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
            /// <summary>
            /// 将数值字符串加密为短字符串(7位数字转4位字符)
            /// </summary>
            /// <param name="numberStr"></param>
            /// <returns></returns>
            static string IntToEnode62(string numberStr)
            {
                var iNumber = long.Parse(numberStr);
                var result = "";
                do
                {
                    var m = iNumber % 62;
                    result = Keys[(int)m] + result;
                    iNumber = (iNumber - m) / 62;
                }
                while (iNumber > 0);
    
                return result.PadLeft(4, '0');
            }
    
            /// <summary>
            /// 将加密后短字符串转换为原数值(4位字符转7位数字)
            /// </summary>
            /// <param name="shortStr"></param>
            /// <returns></returns>
            static long Encode62ToInt(string shortStr)
            {
                long num = 0;
                for (var i = 0; i < shortStr.Length; i++)
                {
                    var n = shortStr.Length - i - 1;
                    num += Convert.ToInt64(Keys.IndexOf(shortStr[i]) * Math.Pow(62, n));
                }
    
                var temp = num.ToString().PadLeft(7, '0');
                long.TryParse(temp, out num);
    
                return num;
            }
    
            /// <summary>
            /// 将加密后短字符串转换为原数值字符串
            /// </summary>
            /// <param name="shortStr">密后短字符串</param>
            /// <returns>原数值字符串</returns>
            public static string StrToNumber(string shortStr)
            {
                var id = "";
                for (var i = shortStr.Length - 4; i > -4; i = i - 4) //从最后往前以4字节为一组读取字符  
                {
                    var offset = i < 0 ? 0 : i;
                    var len = i < 0 ? shortStr.Length % 4 : 4;
                    var str = Encode62ToInt(shortStr.Substring(offset, len)).ToString();
                    if (offset > 0)
                    {
                        //若不是第一组,则不足7位补0  
                        str = str.PadLeft(7, '0');
                    }
    
                    id = str + id;
                }
    
                return id;
            }
    
            /// <summary>
            /// 将数值字符串加密为短字符串
            /// </summary>
            /// <param name="numberStr">原数值字符串,数值范围在[-9223372036854775808,9223372036854775807]</param>
            /// <returns>数字或字母加密短字符结果</returns>
            public static string NumberToStr(string numberStr)
            {
                long iNumber = 0l;
                if (!long.TryParse(numberStr, out iNumber))
                {
                    throw new Exception("数值字符串不在有效范围内!数值范围在[-9223372036854775808,9223372036854775807]");
                }
    
                var result = "";
                for (var i = numberStr.Length - 7; i > -7; i -= 7)
                {
                    var offset1 = (i < 0) ? 0 : i;
                    var offset2 = i + 7;
                    var num = IntToEnode62(numberStr.Substring(offset1, offset2 - offset1));
                    result = num + result;
                }
    
                return result;
            }
        }
  • 相关阅读:
    promise
    ES6中的类
    css基础知识
    ES6数据解构:set map 的介绍
    ES6对象的拓展
    ES6函数的拓展
    ES6数组的拓展
    ES6字符串和数值的扩展
    webpack的三种运行方式
    Mysql数据增删改操作以及复制表小技巧
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/6430472.html
Copyright © 2011-2022 走看看