dev / urandom唯一ID算法

时间:2014-03-22 16:44:46

标签: php

在开始之前,我要感谢所有人并道歉,因为我不能流利地说英语。 好, 我在下面用这个算法生成一个唯一的数字。

我的唯一ID对于所有产品都不是全局的,但每个产品都使用唯一的ID,例如:

新闻,专辑,视频......

如果此ID存在,我不想检查数据库,因为流量太大。

注1:存在用户同时提交内容的可能性。

注意2:我的唯一ID区分大小写。

此ID在网址中可见,我不想要一个包含多个字符的大ID。
网址
HTTP:// WWW [...]的.com /新闻/ A-冠军的出头-后hQ38-k8_.html

我的ID是基于dev / urandom创建的

$ID = strtr(base64_encode(mcrypt_create_iv(5, MCRYPT_DEV_URANDOM)), '+=/', 'X_-');

存在最佳解决方案还是这种方式非常好?


(文档) - 本主题中使用的函数:

  1. strtr (字符串$ str,字符串$ from,字符串$ to)

  2. base64_encode (字符串$ data)

  3. mcrypt_create_iv (int $ size [,int $ source = MCRYPT_DEV_RANDOM])

2 个答案:

答案 0 :(得分:1)

听起来像uniqid()完全符合你的需要。当然,如果需要,您可以在其上添加进一步的混淆。

答案 1 :(得分:0)

如果您无法使用数据库来为您处理ID创建,那么使用UUID可能会有所帮助。既然你提到了特定于Linux的/ dev / urandom,我想使用Linux内核为你生成UUID不是问题。在这种情况下,您可以从/proc/sys/kernel/random/uuid

中读取UUID

请注意,有许多不同类型的UUID。在这个例子中生成的UUID可以通过以下事实来识别:第3个块以' 4'哪个IIRC是UUID用于'这是一个随机的128位数字,编码为UUID'。还有例如基于URL的UUID,如果您想要一种确定的方式将ID令牌映射到您的产品,那么这可能是更好的选择。