如何在不复制的情况下使用php创建唯一的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即可

我需要创建唯一的用户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多万条记录的冲突。

您只需使用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

对其进行了标记,正如我在:

答案是使用组合了“唯一”部分和“随机”部分的

  • “唯一”部分可以是一个单调递增的计数器(例如数据库中的记录或行号),也可以是一个以完整周期生成的数字(在重复之前伪随机循环其周期中的所有可能值)
  • “随机”部分只是由加密随机数生成器生成的随机数[
    random\u int
    或PHP中的
    random\u bytes
    )。一般来说,时间越长,预测性就越差

此外,为了生成唯一标识符,没有理由像现在这样将自己限制为8位标识符。

您应该使用UUID。它不是6-8个字符,但如果您想保证唯一性,6-8个字符实际上是不够的,除非您将以前使用的值存储在某个位置。是的,我将其作为成员id存储在数据库中!UUID太长,用户使用UUID登录是不可行的,我应该保存以前在单独的表中使用的吗?很好的开始Theekshana。您可以这样运行此函数,它应该返回一个关于6到8位数字的输出!UUID不是我期待的!
md5(uniqid(rand(), true))