我见过很多关于如何在PHP中使用uniqid()来创建唯一字符串的例子,但是需要创建一个唯一的订单号(只有整数,没有字母)。
我喜欢uniqid()的想法,因为根据我的理解,它使用日期/时间,因此创建另一个相同的id的机会是零...(如果我正确理解函数)< / p>
答案 0 :(得分:3)
mt_rand应该可以做到这一点。
它在第一个参数和第二个参数之间生成一个随机数。例如,要生成500到1000之间的随机数,您需要:
$number = mt_rand(500,1000);
但如果您将其用作订单号,则应使用自动增量列。它不仅仅是它的用途,而且如果不止一次生成相同的数字,你会怎么做?假设你正在使用MySQL,你可以read about autoincrement columns here。
答案 1 :(得分:1)
使用hexdec将十六进制字符串转换为数字。 http://us.php.net/manual/en/function.hexdec.php
hexdec(uniqid())
答案 2 :(得分:0)
uniqid()做你正在考虑的事情..但是如果你把这个值插入数据库,你最好使用自动递增字段来表示ids ...这真的取决于你是什么使用ids来实现。
答案 3 :(得分:0)
我个人使用date('U')
根据自UNIX EPOCH以来的秒数生成字符串。如果这不够随机(如果您认为您将在同一秒内放置两个订单),只需添加另一个mt_rand(0,9)
层:
$uniqid = date('U') . mt_rand(0,9);
在几乎所有情况下,这将为您提供增量ID,除非在完全相同的秒内创建订单,在这种情况下,第二个订单可以在第一个订单之前。