首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法像短GUID一样创建一个简短的唯一代码?

有没有办法像短GUID一样创建一个简短的唯一代码?
EN

Stack Overflow用户
提问于 2011-11-14 14:56:54
回答 5查看 31.5K关注 0票数 28

我想创建一个简短的GUID。有没有办法像短GUID一样创建一个简短的唯一代码?我想创建一个票证跟踪号。

EN

回答 5

Stack Overflow用户

发布于 2011-11-14 16:06:14

GUID的长度是128位(16字节),所以如果你想创建一个短的GUID,你必须改变GUID的编码。

例如,您可以使用base64或ASCII85。

代码语言:javascript
运行
复制
    /// <summary>
    /// Creates a GUID which is guaranteed not to equal the empty GUID
    /// </summary>
    /// <returns>A 24 character long string</returns>
    public static string CreateGuid()
    {
        Guid guid = Guid.Empty;
        while (Guid.Empty == guid)
        {
            guid = Guid.NewGuid();
        }

        // Uses base64 encoding the guid.(Or  ASCII85 encoded)
        // But not recommend using Hex, as it is less efficient.
        return Convert.ToBase64String(guid.ToByteArray());
    }
票数 18
EN

Stack Overflow用户

发布于 2011-11-14 15:02:37

Jeff Atwood在他的博客上有一篇文章如何在不丢失信息的情况下将GUID缩短到20个字符:

Coding Horror: Equipping our ASCII Armor

票数 14
EN

Stack Overflow用户

发布于 2014-12-02 08:28:03

一年内独一无二,明显的“随机性”

代码语言:javascript
运行
复制
string UniqueID()
{
    var t = DateTime.UtcNow;
    long dgit = t.Millisecond   * 1000000000L +
                t.DayOfYear     * 1000000L +
                t.Hour          * 10000L +
                t.Minute        * 100L +
                t.Second;
    return Convert.ToBase64String(BitConverter.GetBytes(dgit).Take(5).ToArray()).TrimEnd('=');
}

这里有一个具有可定制字符集的

代码语言:javascript
运行
复制
string UniqueID(string CharList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")
{
    var t = DateTime.UtcNow;
    char[] charArray = CharList.ToCharArray();
    var result = new Stack<char>();

    var length = charArray.Length;

    long dgit = 1000000000000L +
                t.Millisecond   * 1000000000L +
                t.DayOfYear     * 1000000L +
                t.Hour          * 10000L +
                t.Minute        * 100L +
                t.Second;

    while (dgit != 0)
    {
        result.Push(charArray[dgit % length]);
        dgit /= length;
    }
    return new string(result.ToArray());
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8118252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档