目前我和我的朋友正在开发一个网站,对于我们称之为“项目”的项目,我们在数据库中只有一个基本的自动增量 ID,用于导航到项目,例如
oururl.com/viewproject?id=1
但我们开始思考,如果我们有很多已发布的项目,那将是一个长 URL。所以我们需要以某种方式随机生成一个大约 6 个字符长的字母数字字符串。我们希望字符串被复制的机会极低,当然我们会在分配标识符之前查询数据库。感谢您的帮助,意义重大!
目前我和我的朋友正在开发一个网站,对于我们称之为“项目”的项目,我们在数据库中只有一个基本的自动增量 ID,用于导航到项目,例如
oururl.com/viewproject?id=1
但我们开始思考,如果我们有很多已发布的项目,那将是一个长 URL。所以我们需要以某种方式随机生成一个大约 6 个字符长的字母数字字符串。我们希望字符串被复制的机会极低,当然我们会在分配标识符之前查询数据库。感谢您的帮助,意义重大!
将数字 ID 保存在数据库中以提高速度。使用将这些数字 ID 转换为字母数字 ID 的算法。
这样,您不必担心重复,并且您仍然可以在数据库中获得非常快速的索引。
看到这个答案: https ://stackoverflow.com/a/12479939/362536 这个问题: Tinyurl-style unique code: potential algorithm to prevent collisions
尝试这个:
$id = substr(md5(uniqid()), 0, 6);
您可以使用此代码生成动态 6 位数字......
$random = substr(number_format(time() * rand(),0,'',''),0,6);
下面是代码发生的情况: 外部“substr”用于将我们创建的随机数减少为 6 个字符。您会注意到代码段末尾的数字 10,可以将其更改为您想要的任何数字。
“number_format”函数有助于摆脱生成随机数所产生的科学记数法。在中间,“time()”和“rand()”相乘。Time() 是从 1970 年 1 月 1 日开始的秒数,rand() 是通过 PHP 唯一生成的数字。
永远记住,生成唯一数字并不是万无一失的。如果您的应用程序要求每个编号都是唯一的,请在保存之前在数据库中执行冲突检查。