作者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