Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何创建唯一的_Php - Fatal编程技术网

PHP:如何创建唯一的

PHP:如何创建唯一的,php,Php,我已经看到了很多关于如何在PHP中使用uniqid创建唯一字符串的示例,但是只需要创建唯一的顺序号整数,而不需要创建字母 我喜欢uniqid的想法,因为据我所知,它使用日期/时间,所以创建另一个相同id的可能性为零。。。。如果我正确地理解了函数就应该做到这一点 它在第一个参数和第二个参数之间生成一个随机数。例如,要生成500到1000之间的随机数,您需要执行以下操作: $number = mt_rand(500,1000); 但如果您将其用作订单号,则应该只使用自动增量列。这不仅是它的目的,而

我已经看到了很多关于如何在PHP中使用uniqid创建唯一字符串的示例,但是只需要创建唯一的顺序号整数,而不需要创建字母

我喜欢uniqid的想法,因为据我所知,它使用日期/时间,所以创建另一个相同id的可能性为零。。。。如果我正确地理解了函数

就应该做到这一点

它在第一个参数和第二个参数之间生成一个随机数。例如,要生成500到1000之间的随机数,您需要执行以下操作:

$number = mt_rand(500,1000);
但如果您将其用作订单号,则应该只使用自动增量列。这不仅是它的目的,而且如果同一个数字被多次生成,你会怎么做?假设您使用的是MySQL,您可以。

应该可以做到这一点

它在第一个参数和第二个参数之间生成一个随机数。例如,要生成500到1000之间的随机数,您需要执行以下操作:

$number = mt_rand(500,1000);

但如果您将其用作订单号,则应该只使用自动增量列。这不仅是它的目的,而且如果同一个数字被多次生成,你会怎么做?假设您使用的是MySQL,您可以使用hexdec将十六进制字符串转换为数字


使用hexdec将十六进制字符串转换为数字


uniqid做你认为它做的事。。但如果要将此值插入数据库,最好使用ID的自动递增字段。。这实际上取决于您使用ID的目的。

uniqid做您认为它做的事情。。但如果要将此值插入数据库,最好使用ID的自动递增字段。。这实际上取决于您使用ID的目的。

我个人使用date'U'根据UNIX时代以来的秒数生成字符串。如果这不够随机,如果您认为在同一秒内会有两个订单,只需添加另一层mt_rand0,9:

在几乎所有情况下,这将为您提供一个增量ID,除了在完全相同的秒数创建订单的情况,在这种情况下,第二个订单可以先于第一个订单。

我个人使用日期“U”根据自UNIX纪元以来的秒数生成字符串。如果这不够随机,如果您认为在同一秒内会有两个订单,只需添加另一层mt_rand0,9:


在几乎所有情况下,这将为您提供一个增量ID,但在完全相同的时间创建订单的情况除外,在这种情况下,第二个订单可以先于第一个订单。

我正在使用它创建一个唯一的订单号,用户输入该编号以激活帐户。除此之外,它不会被用作数据库中的标识符,我有一个单独的自动递增id。我只是想确保如果我给某人分配了一个订单号,其他人就不会收到相同的订单号。由于用户必须输入号码才能激活,我不想要字母,只想要数字。他们的用户id不够吗?如果您不想让任何人知道他们的号码,您可以始终使用sha1user_id…我正在使用它创建一个唯一的订单号,用户输入该订单号以激活帐户。除此之外,它不会被用作数据库中的标识符,我有一个单独的自动递增id。我只是想确保如果我给某人分配了一个订单号,其他人就不会收到相同的订单号。由于用户必须输入号码才能激活,我不想要字母,只想要数字。他们的用户id不够吗?如果你不想让任何人知道他们的号码,你可以用sha1user_id…@Gumbo:True,但你不能只用PHP生成唯一的号码。我更新了我的答案以合并数据库。uniqid确实生成了一个唯一的数字-它只是用十六进制表示。我在数据库中使用了一个自动递增列作为ID,但订单号是用户输入以激活其帐户的数字。我不想使用递增的数字,因为如果其他人知道当前的订单号,他们可能会猜到即将到来的订单号。我不想要任何字母,因为我希望用户可以轻松地重新输入,而不会混淆字母/数字。uniqid实际上会生成一个随机数-它的范围非常大,2^48,因此生成的两个ID不太可能相同。当然,你可以调用uniqid并将它从十六进制转换成整数。这听起来更像是一个设计问题。你用随机顺序号制造了一种虚假的安全感。那不是个好主意。您应该实现真正的保护。@Gumbo:True,但您不能仅使用PHP生成唯一的数字。我更新了我的答案,也加入了数据库。uniqid确实生成了一个唯一的数字——它只是表示出来的
在十六进制中,我在数据库中使用自动递增列作为ID,但订单号是用户输入以激活其帐户的数字。我不想使用递增的数字,因为如果其他人知道当前的订单号,他们可能会猜到即将到来的订单号。我不想要任何字母,因为我希望用户可以轻松地重新输入,而不会混淆字母/数字。uniqid实际上会生成一个随机数-它的范围非常大,2^48,因此生成的两个ID不太可能相同。当然,你可以调用uniqid并将它从十六进制转换成整数。这听起来更像是一个设计问题。你用随机顺序号制造了一种虚假的安全感。那不是个好主意。你应该实施真正的保护。我可以补充说,这会产生相当大的浮动。我可以补充说,这会产生相当大的浮动。
$uniqid = date('U') . mt_rand(0,9);