代码改变世界

短的 Guid 帮助类

2019-03-28 12:20  音乐让我说  阅读(382)  评论(0)    收藏  举报

直接贴代码了:

    /// <summary>
    /// 短的 Guid 帮助类
    /// </summary>
    public class ShortGuidHelper
    {
        #region 方案1(不太推荐了)

        ///// <summary>
        ///// 得到短的 Guid
        ///// </summary>
        ///// <returns></returns>
        //public static string GetShortGuid()
        //{
        //    string base64Guid = System.Convert.ToBase64String(Guid.NewGuid().ToByteArray());
        //    string guidString = StringExtension.ReplaceNonEnAndNonNumber(base64Guid,
        //        RandomUtils.RandomChar().ToString());
        //    return guidString;  //guidString 的长度为 24
        //}

        #endregion

        #region 方案2

        /// <summary>
        /// 获取新的长度为 22 的 Guid 字符串。
        /// </summary>
        /// <returns></returns>
        public static string GetNewShortId()
        {
            return Encode(System.Guid.NewGuid());
        }

        /// <summary>
        /// 编码一个 Guid 成 22 位长度的字符串
        /// </summary>
        /// <param name="guid"></param>
        /// <returns></returns>
        public static string Encode(Guid guid)
        {
            string encoded = Convert.ToBase64String(guid.ToByteArray());
            encoded = encoded
                .Replace("/", "_")
                .Replace("+", "-");
            return encoded.Substring(0, 22);
        }

        /// <summary>
        /// 解码一个 22 位长度的字符串成 Guid
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static Guid Decode(string value)
        {
            value = value
                .Replace("_", "/")
                .Replace("-", "+");
            byte[] buffer = Convert.FromBase64String(value + "==");
            return new Guid(buffer);
        }

        #endregion
    }

 

谢谢浏览!