如何在不复制的情况下使用php创建唯一的6到8位代码
我需要创建唯一的用户id,它不会以任何代价复制。正如我所说,我使用这个id让用户登录,这个id也可以作为参考id。id的长度可以是6到8。到目前为止,我已经试过了如何在不复制的情况下使用php创建唯一的6到8位代码,php,laravel,Php,Laravel,我需要创建唯一的用户id,它不会以任何代价复制。正如我所说,我使用这个id让用户登录,这个id也可以作为参考id。id的长度可以是6到8。到目前为止,我已经试过了 $v = mt_rand(10, 99); $b = date("s"); $a = round(microtime(true)); $c = substr($a, 8); 这会创建唯一的id吗?而且,我预计用户群将超过1000万。因此需要避免1000多万条记录的冲突。您只需使用phpuniqid()函数生成唯一的id即可
$v = mt_rand(10, 99);
$b = date("s");
$a = round(microtime(true));
$c = substr($a, 8);
这会创建唯一的id吗?而且,我预计用户群将超过1000万。因此需要避免1000多万条记录的冲突。您只需使用php
uniqid()
函数生成唯一的id即可
有关uniqid()
函数的更多信息,请参阅下面的链接
注:上述功能也不保证总是返回唯一值,因为大多数系统通过NTP或类似方式调整系统时钟,系统时间不断变化。若要增加唯一性,请将“更大的熵”设置为TRUE
在这里,你可以这样做
md5(uniqid(rand(), true))
请检查考虑到所查看的长度,您不能依靠自己的解决方案来获得100%唯一ID。我建议您应该使用一个自动递增的主键,在创建记录之后,使用使用主键创建的值更新您的自定义ID列 比如,;创建一个记录并获取其整数ID。然后更新自定义ID列,如下所示:
$user=user::create($data);
$user->custom_id=sprintf('user-%s',$user->id);
$user->save();
这样,您将能够使用一个简短的ID,并确保该ID是唯一的
但正如其他答案所建议的,您应该使用UUID库。这是经过多年使用案例开发的解决方案
p、 使用您自己指定的解决方案,在达到1000万目标之前,您将经历1000秒的碰撞。此外,我以User::create()
为例创建了一条记录,因为您已经用laravel
对其进行了标记,正如我在:
答案是使用组合了“唯一”部分和“随机”部分的
- “唯一”部分可以是一个单调递增的计数器(例如数据库中的记录或行号),也可以是一个以完整周期生成的数字(在重复之前伪随机循环其周期中的所有可能值)
- “随机”部分只是由加密随机数生成器生成的随机数[
或PHP中的random\u int
)。一般来说,时间越长,预测性就越差random\u bytes
此外,为了生成唯一标识符,没有理由像现在这样将自己限制为8位标识符。您应该使用UUID。它不是6-8个字符,但如果您想保证唯一性,6-8个字符实际上是不够的,除非您将以前使用的值存储在某个位置。是的,我将其作为成员id存储在数据库中!UUID太长,用户使用UUID登录是不可行的,我应该保存以前在单独的表中使用的吗?很好的开始Theekshana。您可以这样运行此函数,它应该返回一个关于6到8位数字的输出!UUID不是我期待的!
md5(uniqid(rand(), true))