作者jjjkkkooo (接科噎歐)
看板PHP
標題[請益] UUID
時間Tue Oct 16 15:46:11 2012
搜尋了幾個產生UUID的function但總覺得不符合自己的需求
因此自己寫了一個簡單的隨機產生字串的function
function genMyUUID( $len ){
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
$key = "";
$randMax = strlen( $chars ) - 1;
for( $i = 0 ; $i < $len ; $i++ ) {
$key.= $chars[ mt_rand( 0, $randMax ) ];
}
return $key;
}
丟進去要產生字串的長度,例如16
便會拿到像: ioCte52-76fsTSDG
這種字串,簡單用數學機率算了一下,每2個長度為16的字串
的碰撞機率應該是 (1/64)^16 這樣?
想請問這樣會比像這底下這種常見產生UUID的function來得好嗎?
function uuID( $prefix = "" ){
return $prefix.md5( uniqid( mt_rand(), true ) );
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.72.198.81
1F:推 LaPass:通常.... 那些已經寫好的function都是經過千錘百鍊的,沒必 10/16 16:14
2F:→ LaPass:要隨便挑戰。 10/16 16:14
3F:→ LaPass:如果自己有特殊需求,要自己寫的話,那另當別論 10/16 16:15
4F:→ jjjkkkooo:就是有特殊需求 @@",長度、出現的字元… 10/16 16:23
5F:→ jjjkkkooo:再來是看到有關md5的討論,對它實在不大放心 10/16 16:23
6F:→ MOONRAKER:md5不敢用,改用SHA1就好了,有什麼好怕的 10/16 16:34
7F:→ jjjkkkooo:sha一樣不符合需求啊,長度、出現的字元 10/16 16:39
8F:推 LaPass:那的確是自己編會比較好..... 不過,我想建議,最好能拿某 10/16 16:40
9F:→ LaPass:種東西來當key去換算成字串會比較好,例如那筆資料的主鍵 10/16 16:42
10F:→ LaPass:這樣絕對能防止撞到 10/16 16:42
11F:→ jjjkkkooo:推LaPass大,我再加上microtime 10/16 17:04
12F:推 mervynW:先在算個1m uuid 進db 要用一個一個拿. 10/16 17:22
13F:→ buganini:為什麼不是找native implementation來用? 10/18 11:27