使用CRC32生成短网址

5 投票
6 回答
3529 浏览
提问于 2025-04-15 14:11

我正在尝试理解crc32,以便为网页生成唯一的链接。

如果我们使用crc32,最多可以生成多少个链接,以避免重复呢?

为了保持校验和为2的32次方,字符串的长度大概应该是多少呢?

我试过用UUID来生成链接,然后把UUID的字节转换成base 64,这样可以缩短到22个字符。我想知道是否还能再缩短。

我主要想把一个最长为1024个字符的链接转换成一个更短的ID。

6 个回答

2

制作短网址的正确方法是把完整的网址存储在数据库里,然后发布一个和数据库行索引对应的东西。比如,可以用行ID的Base64编码来表示,或者你也可以使用一个唯一标识符(UID)作为主键来展示。

不要使用校验和,因为它太小了,很容易出现重复的情况。虽然加密哈希值更大,重复的可能性也小一些,但这仍然不是最佳选择。

4

如果你已经在数据库表里存储了完整的网址,那么用一个整数ID来代替是个不错的选择,因为整数ID比较短。而且你还可以通过把它转换成16进制、64进制或者85进制来让它更短。如果你能使用UUID(通用唯一识别码),那么也可以用整数,反正整数更短。而且在你的查找表里,我看不出UUID有什么特别的好处。

7

对于CRC32来说,并没有一个具体的数字可以告诉你“最多可以使用多少个网址,以避免重复”。

问题在于,CRC32可能会产生重复的结果,这并不是你输入多少个值的问题,而是这些值本身的特点。

所以,如果运气不好,你可能在第二个网址的时候就会出现重复。

因此,你不应该依赖这个算法来生成唯一的哈希值,而是应该手动为每个网址生成一个独特的值。

撰写回答