php生成"局部唯一识别码"LUID
2012-08-10 15:52
537 查看
UUID(Universally Unique Identifier),GUID都是希望在整个时空范围内能产生唯一识别码,这在分布式计算环境下是必要的. 然而,如果仅仅是想在一个受限定的局部环境下,想生成一个"局部唯一识别码",使用UUID就是杀鸡用牛刀,这个"局部唯一识别码",我称之为LUID(Local Unique Identifier)
比如我在用php开发网站程序时,为避免用户同时多次打开同一个网页导致session名称冲突问题, 就希望保存的session不是$_SESSION['param'],而是$_SESSION[$luid]['param'],再通过其他方式传递$luid值,保证'param'参数不被覆盖. 查找了一下别人的解决方式,都是生成UUID,而生成UUID的算法洋洋洒洒上百行. 我考虑到因为是在SESSION空间里,是一个受限定的环境,其唯一性的强度不必太高,只要在同一个SESSION的生存期限内唯一就可以了,于是便有了下面的代码:
其实就一行.return MD5(microtime());
按道理microtime()返回的字符串就已经是唯一的了,我测了一下,即使连续执行microtime(),返回值也有100us以上的差别,而使用者点击,并在网络上传递再由服务器处理的间隔远不止几十ms. 加上md5只是让结果杂乱化.
比如我在用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只是让结果杂乱化.
相关文章推荐
- php生成局部唯一识别码LUID的代码
- php生成局部唯一识别码LUID的代码
- php生成唯一识别码uuid 分类: php uuid guid 2014-02-08 11:59 888人阅读 评论(0) 收藏
- php 首字母及"_"后首字母都要大写(实现字符串中"open_door"转换成"OpenDoor")
- hdu 1233 最小生成树 "还是畅通工程"
- php 生成唯一订单号,文件锁
- 关于"生成cmd.exe"的解决方法
- php://input &$GLOBALS["HTTP_RAW_POST_DATA"]&$_POST
- VC2005中 提示”生成"cmd.exe"时出错 “
- php的$_FILES的临时储存文件与"回收机制"
- 在Windows Explorer右键添加"删除Tortoise SVN生成的.svn目录"
- 正在进行生成的同时试图签出,因为无法对必须修改的文件"Web.config等"进行更改...
- 正在进行生成的同时试图签出,因为无法对必须修改的文件"Web.config"进行更改...
- 关于PHP 的strtotime("2016.01.26")不输出问题bug查找
- 【php】读取"文件列表"按时间倒序显示,并递归显示各层文件夹、!
- file_get_contents("php://input", "r")
- php生成唯一id
- PHP生成唯一订单号
- PHP实现生成唯一编号(36进制的不重复编号)