PHP客户端唯一标识符

8

每当客户请求服务支持时,我会生成一个唯一的客户标识符。

一旦标识符被生成,它就会被插入数据库中。

以下是我的代码:

function makeUnique() {
 $start_time = uniqid(microtime(1));
 $duration = sprintf('%0.24f', $start_time);
 return date('dmYHis').$duration;
}

echo makeUnique();

这个输出结果是:071120112032291320715949.928639888763427734375000

由于某些原因,您只得到了071120112032291320715949作为数字。您做错了什么?

2个回答

6
您需要在函数中删除“.”(点)。您可能正在使用INT,这会删除小数点后的数字。
请确保字段足够大-例如varchar(50)。
我的建议是仅使用md5对客户端ID进行哈希处理。
md5($clientid)
然后将mysql字段设置为char(32)。

4

您的代码中已经有了解决方案。PHP函数uniqid()提供了一个唯一的ID。如果您想确保它真的非常非常非常独特(虽然这并不是必要的),只需在末尾附加time()即可,像这样:

    return uniqid().time();

这也会返回混合了数字和字母(更高的熵)的文本,例如以下响应:
    4eb8895a76edc1320716634

你也可以像这样使用 uniqid('', TRUE),它会在返回值末尾添加额外的熵(使用组合线性同余生成器),从而增加结果唯一的可能性。 - DarkSide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接