【发布时间】:2021-06-30 14:38:11
【问题描述】:
我正在做我的第一个真正的项目,我有点担心。我正在尝试创建一个唯一的用户 ID(我正在使用 PHP 和 mysql)。我对这个话题做了一些研究,老实说,我不知所措。我读到的最后一件事是关于一个叫做 uniqid() 的东西,但是文章说 [这个函数不保证返回值的唯一性。由于大多数系统通过NTP或类似的方式调整系统时钟,因此系统时间不断变化... Source PHP manual]。然后我考虑添加一个随机前缀,并在下面提供了这段代码。一个唯一的用户 ID 就足够了吗?
<?php
$sub = substr(str_shuffle('AQWZSXEDCRFVTGBYHNUJIKOLMP'),16); // returns the last 10 chars
$shuff = str_shuffle(strval(rand(1000,9999)).$sub); // shuffle the 10 random chars with 4 random number
$user_id = uniqid($shuff);
【问题讨论】:
-
我的票投给mysql主键
-
使用具有 AutoIncrement 的 id 列,该列至少对该表来说始终是唯一的
-
uniqid()不保证唯一性,但如果你省略它的$more_entropy第二个参数,那就太糟糕了。我从来没有在一个值不是由数据库引擎生成的项目中工作过,但是,如果你选择 PHP 路线,你可以找到一个有信誉的 UUID 库......或使用序号:1、2、3.. . :) -
如果您只想生成随机的字母数字字符串,请查看random_bytes()。如果长度足够长(比如 32+),那么生成重复项的可能性非常小(虽然不是说不可能),但是如果您需要 100% 唯一的用户 ID,那么您应该按照其他人的建议进行操作,使用自动递增的主改为键入您的数据库。