缩短guid的唯一性

本文关键字:唯一性 guid 缩短 | 更新日期: 2023-09-27 18:21:27

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

public static string CreateGuid()
        {          
          Guid guid = Guid.NewGuid();
            return Convert.ToBase64String(guid.ToByteArray());
        }

这会像guid一样唯一吗?因为我有几个url要生成,这个guid将保存在DB中。

缩短guid的唯一性

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

如果你在url中使用这个,你应该小心。虽然字符串会更短,但它可能包含URL中非法的字符,因此您可能需要通过运行它

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的碰撞几率,或者相同的值出现两次。这很小,但如果你写的东西会被使用很多次,你可能会遇到问题。