在开始之前,我要感谢所有人并道歉,因为我不能流利地说英语。 好, 我在下面用这个算法生成一个唯一的数字。
我的唯一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_-');
存在最佳解决方案还是这种方式非常好?
(文档) - 本主题中使用的函数:
strtr (字符串$ str,字符串$ from,字符串$ to)
base64_encode (字符串$ data)
mcrypt_create_iv (int $ size [,int $ source = MCRYPT_DEV_RANDOM])
答案 0 :(得分:1)
听起来像uniqid()完全符合你的需要。当然,如果需要,您可以在其上添加进一步的混淆。
答案 1 :(得分:0)
如果您无法使用数据库来为您处理ID创建,那么使用UUID可能会有所帮助。既然你提到了特定于Linux的/ dev / urandom,我想使用Linux内核为你生成UUID不是问题。在这种情况下,您可以从/proc/sys/kernel/random/uuid
请注意,有许多不同类型的UUID。在这个例子中生成的UUID可以通过以下事实来识别:第3个块以' 4'哪个IIRC是UUID用于'这是一个随机的128位数字,编码为UUID'。还有例如基于URL的UUID,如果您想要一种确定的方式将ID令牌映射到您的产品,那么这可能是更好的选择。