【问题标题】:PHP short form of uniqid() to generate unique url tokens? [duplicate]PHP uniqid() 的缩写形式来生成唯一的 url 令牌? [复制]
【发布时间】:2012-07-27 02:49:43
【问题描述】:

可能重复:
PHP short hash like URL-shortening websites

我需要一个函数,在其中我可以使用唯一的字母数字标记制作 url 标记,我会使用 uniqid 但它对于用户喜欢的标记来说太长了,我需要在结尾处取下多少uniqid 字符串,因此它更短,但同时我可以在一秒钟内收到 1000 个请求(因此每毫秒 1 个)。我知道uniqid使用microtime()来计算字符串。

这是否可能,或者我必须使用其他功能。如果我必须使用其他功能,你能告诉我一两个吗?

提前致谢!

【问题讨论】:

  • 查看openssl_random_pseudo_bytes
  • 我要花多少才能结束,所以...我可以在一秒钟内收到 1000 个请求 - 变量太多,无法很好地回答这个问题。取决于您的服务器负载及其 CPU 容量等。
  • @halfer 你能给我一个建议的答案吗?我的意思是我最后会去掉多少个字符而不让它变得不唯一?
  • 最后我会取出多少个字符而不使其不唯一 - 好吧,所有哈希都有冲突(哈希两个不同事物并得到相同的情况结果)。缩短得越多,发生碰撞的可能性就越大。正如您所说,您需要用一个方便用户的长度来权衡它 - 所以可能是 8 个字母数字字符(所以 36^8)?或者,如果您准备使用区分大小写 (62^8)。这仍然是很多 URL - 您需要为每个 URL 查找一个 db 行。
  • @halfer 会回显 substr(uniqid(), 0, 10);对我告诉你的内容足够独特?

标签: php unique


【解决方案1】:

你尝试过这样的事情吗?

$string = md5(rand()); 

如果太长,你可以用substr()来缩短它。我发现它非常快。

【讨论】:

  • 已经找到,那个hash('md5', 'string');比 md5($string) 更快(源 md5 php 页面)
  • 我的意思是唯一性??感谢您的帮助
  • MD5 非常独特 - 输入中的一个字符更改将导致完全不同的哈希。如果你想要更多的独特性,你可以使用md5(rand() . rand()) ad infinitum。
  • 同样,您可以使用substr() 来缩短它。如果你想要 20 个字符,你可以 substr(md5(rand()), 0, 20);
【解决方案2】:

md4 似乎是最快的:http://www.php.net/manual/en/function.hash.php 但产生 32 个字符

crc32b 是 8 个字符,仍然是最快的哈希值之一

echo hash('crc32b', 'http://stackoverflow.com');

这是 luka8088 在 1000 Kb 上发布的性能结果:

Results: (in microseconds)
   1.  md4                           5307.912
   2.  md5                           6890.058
   3.  crc32b                        7298.946
   4.  crc32                         7561.922
   5.  sha1                          8886.098
   6.  tiger128,3                    11054.992
   7.  haval192,3                    11132.955
   8.  haval224,3                    11160.135
   9.  tiger160,3                    11162.996
  10.  haval160,3                    11242.151
  11.  haval256,3                    11327.981
  12.  tiger192,3                    11630.058
  13.  haval128,3                    11880.874
  14.  tiger192,4                    14776.945
  15.  tiger128,4                    14871.12
  16.  tiger160,4                    14946.937
  17.  haval160,4                    15661.954
  18.  haval192,4                    15717.029
  19.  haval256,4                    15759.944
  20.  adler32                       15796.184
  21.  haval128,4                    15887.022
  22.  haval224,4                    16047.954
  23.  ripemd256                     16245.126
  24.  haval160,5                    17818.927
  25.  haval128,5                    17887.115
  26.  haval224,5                    18085.002
  27.  haval192,5                    18135.07
  28.  haval256,5                    18678.903
  29.  sha256                        19020.08
  30.  ripemd128                     20671.844
  31.  ripemd160                     21853.923
  32.  ripemd320                     22425.889
  33.  sha384                        45102.119
  34.  sha512                        45655.965
  35.  gost                          57237.148
  36.  whirlpool                     64682.96
  37.  snefru                        80352.783
  38.  md2                           705397.844

附言曾经对所有 URI 使用 MD5(所以对于任何 uri,delicious.com/md5hash)都使用 MD5

【讨论】:

猜你喜欢
  • 2021-09-16
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 2015-03-23
  • 2016-01-24
  • 2014-04-16
相关资源
最近更新 更多