最简单的Guid编码,保证唯一性

时间:2011-06-25 16:04:00

标签: .net encoding

目前,当我们需要一个独特的网址时,我们会对64位编码进行编码。

问题是,在保证唯一性的同时,我们可以短于22个字符吗?:

        var id = Guid.NewGuid().ToByteArray();
        var idString = Convert.ToBase64String(id)
            .Replace("=", "")
            .Replace("+", "-")
            .Replace("/", "_");

目前,这将生成类似TwfQfblSTEuF7rLabS2bjA

的字符串

2 个答案:

答案 0 :(得分:3)

Base64每个字符编码6位。一个guid有128位。因此,您需要128/6 = 21.33个字符。不能做分数,22是硬下限。通过为每个字符编码更多位,您只能获得更少的字符。这使得URL编码变得格格不入,我想不出你为什么要这样做的正当理由。

答案 1 :(得分:1)

只有ASCII字符(真正的ASCII字符,而不是字节数> = 128的任何字符)在URL中有效。 Base64已经非常接近您可以获得的字符串的最短URL表示。如果你想变得非常迂腐,你应该能够通过使用所有 URL有效字符来削减一两个字符,而不只是64(总共有80个字符)。

我会说跟base64一起去。它足够接近。