我想按照以下12种数字格式生成唯一标识符:
YYYYMMDDXXXX
例:
201403052318
哪里:
$today = date("Ymd"); $rand = sprintf("%04d",rand(0,9999)); $unique = $today . $rand;
每日所需的唯一卷大约是100.我应该使用什么方法来防止可能重复的rand值或使所有id最大的唯一?也许可以使用当前时间函数来压缩最后4个字符中的这些数字?
你不能依赖rand(),有可能你会生成一个副本(很少见的兰特(0,9999)生成一个重复,但这将在某些时候).
因此,不要使用rand(),只需创建一个增量值(比如说,从1开始)并附加到生成的日期.
下次当你重新生成一个新的id时,抓住那个增量值(比如你把它存储在某处……必须是1对吗?)状态,增加它并将它附加到你的新日期.
你可以使用一个与sha-1和时间相结合的uniqid,并在它们的前4个字符上做一个substr().
<?PHP $today = date("Ymd"); $rand = strtoupper(substr(uniqid(sha1(time())),4)); echo $unique = $today . $rand;
输出:
201403094B3F