0

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

oururl.com/viewproject?id=1

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

4

4 回答 4

2

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

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

看到这个答案: https ://stackoverflow.com/a/12479939/362536 这个问题: Tinyurl-style unique code: potential algorithm to prevent collisions

于 2012-09-22T15:37:40.950 回答
0

您总是可以使用 PHPuniqid()生成随机字符串,然后使用substr().

$unique_six_character_id = substr(uniqid(), 0, 6);
于 2012-09-22T15:36:15.207 回答
0

尝试这个:

    $id = substr(md5(uniqid()), 0, 6);
于 2012-09-22T15:36:45.900 回答
0

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

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

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

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

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

于 2012-09-22T15:45:50.917 回答