PHP生成不重复标识符的方法
本文实例讲述了PHP生成不重复标识符的方法。分享给大家供大家参考。具体实现方法如下:
生成唯一不重复的标识我们主要是根据当前的一个时间time然后再转换在md5值,这样几乎是可以保证标签的唯一性,下面整理了一些关于PHP生成不重复标识符程序代码,感兴趣的朋友可以来看一下
PHP倒是自带了生成唯一id的函数:uniqid(),它是基于当前时间微秒数的,用法如下:
echouniqid();//13位的字符串 echouniqid("php_");//当然你可以加上前缀 echouniqid("php_",TRUE);//如果第二个参数more_entropy为true则生成23位字符串
但是它生成的标识有可能不是唯一的,所以很多人会:
<?php //这是第一种简单的方法,当然用sha1()函数也可以。 echomd5(uniqid()); //第二种,利用时间戳的方法 echomd5(time().mt_rand(1,1000000)); ?>
例子:
<? //生成唯一标识符 //sha1()函数,"安全散列算法(SHA1)" functioncreate_unique(){ $data=$_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'] .time().rand(); returnsha1($data); //returnmd5(time().$data); //return$data; } ?>
例子如下:
<?php $newhash=create_unique(); echo$newhash; ?>
我看到很多人使用md5()函数,即使它并不完全意味着这个目的:
//generateuniquestring echomd5(time().mt_rand(1,1000000)); ThereisactuallyaPHPfunctionnameduniqid()thatismeanttobeusedforthis. //generateuniquestring echouniqid(); /*prints 4bd67c947233e */ //generateanotheruniquestring echouniqid(); /*prints 4bd67c9472340 */
你可能会注意到,尽管字符串是唯一的,前几个字符却是类似的,这是因为生成的字符串与服务器时间相关。
但实际上也存在友好的一方面,由于每个新生成的ID会按字母顺序排列,这样排序就变得很简单。
为了减少重复的概率,你可以传递一个前缀,或第二个参数来增加:
//withprefix echouniqid('foo_'); /*prints foo_4bd67d6cd8b8f */ //withmoreentropy echouniqid('',true); /*prints 4bd67d6cd8b926.12135106 */ //both echouniqid('bar_',true); /*prints bar_4bd67da367b650.43684647 */
这个函数将产生比md5()更短的字符串,节省一些空间。
php生成全球唯一标识符(GUID)的方法
GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。
世界上的任何两台计算机都不会生成重复的GUID值。
需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。
<?php //php生成GUID functiongetGuid(){ $charid=strtoupper(md5(uniqid(mt_rand(),true))); $hyphen=chr(45);//"-" $uuid=substr($charid,0,8).$hyphen .substr($charid,8,4).$hyphen .substr($charid,12,4).$hyphen .substr($charid,16,4).$hyphen .substr($charid,20,12); return$uuid; } ?>
希望本文所述对大家的php程序设计有所帮助。