2011-11-08 174 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