background image

php 生成局部唯一识别码 LUID 的代码

  UUID(Universally Unique Identifier),GUID 都是希望在整个时空范围内能产生唯一识别
码,这在分布式计算环境下是必要的. 然而,如果仅仅是想在一个受限定的局部环境下,想生
成一个"局部唯一识别码",使用 UUID 就是杀鸡用牛刀,这个"局部唯一识别码",我称之为
LUID(Local Unique Identifier) 
 
  比如我在用 php 开发网站程序时,为避免用户同时多次打开同一个网页导致 session 名
称冲突问题, 就希望保存的 session 不是

$_SESSION

['param'],而是

$_SESSION

[

$luid

]['param'],

再通过其他方式传递

$luid

值,保证'param'参数不被覆盖. 查找了一下别人的解决方式,都是

生成 UUID,而生成 UUID 的算法洋洋洒洒上百行. 我考虑到因为是在 SESSION 空间里,是
一个受限定的环境,其唯一性的强度不必太高,只要在同一个 SESSION 的生存期限内唯一
就可以了,于是便有了下面的代码: 
 

 

复制代码 代码如下:
 

/** 
* 返回一个唯一在本地系统中独一无二的字符串, 
* 返回的是 32 个字符的字符串,形式如'7dac352074f221f3edc74d265c65a636',
或'd198d8fc56ffed627f3f8313d6f06acf' 
*/

 

function

 LUID(){ 

return

 MD5(microtime()); 


 
 
其实就一行.

return

 MD5(microtime()); 

 
按道理 microtime()返回的字符串就已经是唯一的了,我测了一下,即使连续执行 microtime(),
返回值也有 100us 以上的差别,而使用者点击,并在网络上传递再由服务器处理的间隔远不
止几十 ms. 加上 md5 只是让结果杂乱化.