php中唯一的标识字符串

时间:2012-09-22 15:33:01

标签: php

目前我和我的朋友正在开发一个网站,我们称之为“项目”,我们在数据库中只有一个基本的自动增量ID,用于导航到项目,如

oururl.com/viewproject?id=1

但是我们开始思考,如果我们有很多已发布的项目,那将是一个很长的网址。所以我们需要以某种方式随机生成一个大约6个字符长的字母数字字符串。我们希望字符串重复的可能性非常低,当然我们会在分配标识符之前查询数据库。谢谢anyhelp,意思是很多!

4 个答案:

答案 0 :(得分:2)

在数据库中保留数字ID以提高速度。使用将这些数字ID转换为字母数字ID的算法。

这样,您不必担心重复,并且您仍然可以在数据库中获得非常快速的索引。

请参阅此回答:https://stackoverflow.com/a/12479939/362536这个问题:Tinyurl-style unique code: potential algorithm to prevent collisions

答案 1 :(得分:0)

您可以随时使用PHP的 uniqid() 生成随机字符串,然后使用 substr() 将其修剪下来。

$unique_six_character_id = substr(uniqid(), 0, 6);

答案 2 :(得分:0)

试试这个:

    $id = substr(md5(uniqid()), 0, 6);

答案 3 :(得分:0)

您可以使用此代码生成动态6位数....

$random = substr(number_format(time() * rand(),0,'',''),0,6);

以下是代码中发生的事情: 外部“substr”用于将我们创建的随机数减少到6个字符。您会注意到代码段末尾的数字10,可以更改为您想要的任何数字。

“number_format”函数有助于摆脱因生成随机数而产生的科学记数法。在中间,“time()”和“rand()”相乘。 Time()是1970年1月1日以来的秒数,rand()是通过PHP唯一生成的数字。

永远记住,生成唯一的数字不是万无一失的。如果您的应用程序要求每个数字都是唯一的,请在保存之前在数据库中执行冲突检查。