【发布时间】:2012-05-11 03:54:39
【问题描述】:
我的网站有一个部分可以为每个帖子生成一个唯一的 ID,然后将其发送到数据库。问题是生成的 ID 总共有 16 个字符,我只需要 6 个字符。
这是用于生成 ID 的代码:
$order_id = uniqid(rand(10,1000), false);
有什么方法可以完成这样的改变吗?
【问题讨论】:
我的网站有一个部分可以为每个帖子生成一个唯一的 ID,然后将其发送到数据库。问题是生成的 ID 总共有 16 个字符,我只需要 6 个字符。
这是用于生成 ID 的代码:
$order_id = uniqid(rand(10,1000), false);
有什么方法可以完成这样的改变吗?
【问题讨论】:
为什么不在数据库中使用 auto_incremental 呢?所以第一个 id 是 1,然后是 2,依此类推。如果您只需要 6 位数字,这将产生 999 999 个不同的键。
这里之前接受的答案,使用substr() 从uniqid() 中获取前 6 个字符,并不是 100% 安全的。 uniqid 将产生一个唯一的 id,其中整个 id 都是唯一的。删除这些字符可能会导致重复。
【讨论】:
正如上面的OptimusCrime所说,您可以在数据库中使用auto_increment,以及PHP函数str_pad。例如:
<?php
$input = 5;
echo str_pad($input, 6, "0", STR_PAD_LEFT);
上面的代码会生成 6 位字符串,所以你可以使用函数来获取任何你想要的字符串:
000005
【讨论】: