我將把圖像上傳到系統,並且需要它們被非序列唯一ID引用。我讀了一些關於GUID的內容,我想知道在PHP中創建一個最好的方法是什麼。我應該md5()當前的時間戳記和鹽,或將PHP的uniqueid(http://www.php.net/manual/en/function.uniqid.php)函數是否足夠?我應該如何創建我的GUID?
謝謝!
我將把圖像上傳到系統,並且需要它們被非序列唯一ID引用。我讀了一些關於GUID的內容,我想知道在PHP中創建一個最好的方法是什麼。我應該md5()當前的時間戳記和鹽,或將PHP的uniqueid(http://www.php.net/manual/en/function.uniqid.php)函數是否足夠?我應該如何創建我的GUID?
謝謝!
編輯:
哎呀!我忘了我的這個古老的答案。爲了澄清我的天真(符合下面的評論)所產生的混淆:MD5(就像它們本質上最有用的哈希)是而不是內射,所以它們的輸出不保證對所有輸入都是唯一的。
如果散列衝突是一個問題(在這種情況下,它們是),使用這種技術將需要在散列之後檢查是否已經生成了相同的密鑰。
由於uniqid使用當前時間以微秒爲單位生成的GUID,幾乎不存在,你永遠遇到同樣一個兩次機會。
所以,如果你只是用它來製作獨特的文件名,uniqid()就足夠了。如果你想阻止用戶猜測這個GUID,你也可以讓它變得更加困難。
GUID是Microsoft的UUID版本。 PHP的uniqid是UUID的第4版。絕對夠好。
我也想創建GUID調用.NET API而這個函數生成的GUID格式的關鍵,它爲我工作
function generateGuid($include_braces = false) {
if (function_exists('com_create_guid')) {
if ($include_braces === true) {
return com_create_guid();
} else {
return substr(com_create_guid(), 1, 36);
}
} else {
mt_srand((double) microtime() * 10000);
$charid = strtoupper(md5(uniqid(rand(), true)));
$guid = substr($charid, 0, 8) . '-' .
substr($charid, 8, 4) . '-' .
substr($charid, 12, 4) . '-' .
substr($charid, 16, 4) . '-' .
substr($charid, 20, 12);
if ($include_braces) {
$guid = '{' . $guid . '}';
}
return $guid;
}
}
我喜歡md5'ing它的想法:) – 2009-09-19 20:58:38
但是MD5沒有按保持獨特性。 – Gumbo 2009-09-19 21:02:42
如果您的md5已經是唯一的密鑰,它將保持唯一。 – BraedenP 2009-09-19 21:03:51