欢迎各位兄弟 发布技术文章
这里的技术是共享的
<?php
//uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。
//prefix 可选。为 ID 规定前缀。如果两个脚本在相同的微妙生成 ID,该参数很有用。
//more_entropy 可选。规定位于返回值末尾的更多的熵。
//
//说明
//
//如果 prefix 参数为空,则返回的字符串有 13 个字符串长。如果 more_entropy 参数设置为 true,则是 23 个字符串长。
//
//如果 more_entropy 参数设置为 true,则在返回值的末尾添加额外的熵(使用组合线形同余数生成程序),这样可以结果的唯一性更好。
//生成一个随机字符串
$formToken = uniqid();
?>
<?php
// no prefix
$token = md5(uniqid());
// better, difficult to guess
//比较佳的唯一
$better_token = md5(uniqid(rand(), true));
//更加佳的唯一
$better_token = md5(uniqid(rand(), true).mt_rand(1,1000000));
$id = uniqid();
echo $id;
echo "\r\n";
$timestamp = hexdec(substr($id,0,8));
echo date('Y-m-d H:i:s', $timestamp);
uniqid函数的原型:
function _uniqid($prefix=''){
list($micro,$sec) = explode(" " ,microtime());
$msec = ($micro*1000000.00)%0x100000;
return sprintf("%s%x%05x",$prefix,$sec,$msec);
}
但在高并发下,uniqid函数偶尔也会出现重复的ID,这也就是说光用uniqid是不够的,需要拼接一些别的字符,如:使用rand()生成几位随机数再做拼接。
//比较佳的唯一
uniqid(rand(),true);
helloweba.com 作者:月光光 时间:2011-01-23 12:17 标签: php 函数
生成唯一ID的应用场景非常普遍,如临时缓存文件名称,临时变量,临时安全码等,uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID。由于生成唯一ID与微秒时间关联,因此ID的唯一性非常可靠。
生成的唯一ID默认返回的字符串有 13 个字符串长,如果不定义唯一ID的前缀,最多可返回23个字符串长,如果再结合md5()函数,生成的唯一ID可靠性将更高,这种生成的ID比随机性的ID 最大优点在于可实现排序,特别是一些需要存储在数据库中的值。
string uniqid ( [string prefix [, bool more_entropy]] )
可定义唯一ID的前缀与长度
PHP 3, PHP 4, PHP 5
1,生成一个唯一ID
<?php
echo uniqid();
?>
2,结合md5()函数生成一个唯一ID
<?php
echo md5(uniqid());
?>
输出:dfbc5c8c6438de075da28b3c8a413fd0
3,生成多个唯一ID,由于是以微秒计
<?php
echo uniqid();
echo uniqid();
echo uniqid();
?>
输出:
4bfd0e375396b
4bfd0e3753981
4bfd0e3753983
由生成的结果来看,唯一ID之间具有可排序性的。
使用uniqid()函数生成唯一ID既能用于生成临时性ID也能用于生成永久性唯一ID(存储数据库),具体请参与PHP手册。