2011-11-08 130 views
8

我有一个唯一的客户端标识符,我每次生成一个客户端请求服务支持。php客户端的唯一标识符

一旦ID是生成的ID被插入到数据库中

这里我的代码:

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

echo makeUnique(); 

输出:071120112032291320715949.928639888763427734375000

由于某种原因,我得到071120112032291320715949的数量。我究竟做错了什么?

回答

6

您需要删除“。” (点)在你的功能。你可能使用了一个INT来删除点后面的数字。

return str_replace('.', '', date('dmYHis').$duration);

,并确保该字段是足够大的 - 像VARCHAR(50)

我的建议将是简单地使用MD5

md5($clientid)

,你哈希的客户端id将mysql字段设置为字符(32)

+0

是md5很好用吗? –

+2

请阅读此:http://developer.yahoo.com/security/ –

+0

谢谢你的提示 –

4

您已经在代码中获得了解决方案。 php函数uniqid()提供了......一个唯一的ID。如果你想确保它是真的真的真的真的是唯一的(尽管它不是必需的),只是追加时间()到最后,就像这样:

return uniqid().time(); 

这也将返回字母与数字混合(高熵) ,像这样的回应:

4eb8895a76edc1320716634 
+0

你也可以这样做'uniqid('',TRUE)''这将增加额外的熵(使用组合的线性同余发生器)在返回值的末尾,这增加了结果将是唯一的可能性。 – DarkSide