缩短guid的独特性

时间:2014-09-10 14:39:32

标签: c# asp.net

我必须为每个生成的url附加一个唯一代码作为查询字符串。 因此,我选择的选项是缩短guid(在SO上找到)。

public static string CreateGuid()
        {          

          Guid guid = Guid.NewGuid();
            return Convert.ToBase64String(guid.ToByteArray());
        }

这是否与guid一样独特,因为我有几个url要生成,这个guid将保存在DB中。

2 个答案:

答案 0 :(得分:2)

是的,guid的默认字符串表示形式是base16。通过重新格式化与base64相同的值,您可以获得更短(但可能更丑)的字符串。

答案 1 :(得分:1)

你应该注意你是否在网址中使用它。虽然字符串会更短,但它可能包含在网址中非法的字符,因此您可能需要将其运行过去

HttpUtility.UrlEncode()

安全。当然,一旦你这样做,它会再次变得更长。

编辑:

你的评论让你觉得你想要某种数学,所以这里有:

假设您一直有24个字母数字字符,并且外壳无关紧要。这意味着每个角色可以是0-9 + a-z或36种可能性。这使它成为24 ^ 36种不同的可能字符串。然后参考这个网站:

http://davidjohnstone.net/pages/hash-collision-probability

这使您可以插入可能的值以及运行代码所需的次数。 24 ^ 36相当于2 ^ 100(我在谷歌搜索后得到这个数字,可能是不正确的)。在上面的链接中插入100到“哈希中的位数”字段意味着如果你运行代码1000000次,你仍然只有3.944300×10 ^ 19的碰撞几率,或者相同的值出现两次。这是微不足道的,但是如果你写的东西会比你多用很多次,你可能会遇到问题。