关于生成uuid

什么是UUID

UUID是指在一台机器上生成的数字,它保证对在同一时空中的全部机器都是惟一的。一般平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字 php

UUID由如下几部分的组合: 函数

(1)当前日期和时间,UUID的第一个部分与时间有关,若是你在生成一个UUID以后,过几秒又生成一个UUID,则第一个部分不一样,其他相同。 ui

(2)时钟序列。 code

(3)全局惟一的IEEE机器识别号,若是有网卡,从网卡MAC地址得到,没有网卡以其余方式得到。 md5

UUID的惟一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最广泛的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中能够用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每一个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。 string

而 标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12),能够从cflib 下载CreateGUID() UDF进行转换。io

php生成UUID

方法一

function create_guid(){ 
    $microTime = microtime(); 
    list($a_dec, $a_sec) = explode(" ", $microTime); 
    $dec_hex = dechex($a_dec* 1000000); 
    $sec_hex = dechex($a_sec); 
    ensure_length($dec_hex, 5); 
    ensure_length($sec_hex, 6); 
    $guid = ""; 
    $guid .= $dec_hex; 
    $guid .= create_guid_section(3); 
    $guid .= '-'; 
    $guid .= create_guid_section(4); 
    $guid .= '-'; 
    $guid .= create_guid_section(4); 
    $guid .= '-'; 
    $guid .= create_guid_section(4); 
    $guid .= '-'; 
    $guid .= $sec_hex; 
    $guid .= create_guid_section(6); 
    return $guid; 
} 

function ensure_length(&$string, $length){    
    $strlen = strlen($string);    
    if($strlen < $length)    
    {    
        $string = str_pad($string,$length,"0");    
    }    
    else if($strlen > $length)    
    {    
        $string = substr($string, 0, $length);    
    }   
 } 

function create_guid_section($characters){ 
    $return = ""; 
    for($i=0; $i<$characters; $i++) 
    { 
        $return .= dechex(mt_rand(0,15)); 
    } 
    return $return; 
} 


echo create_guid();

方法二

function create_uuid($prefix = ""){    //能够指定前缀
    $str = md5(uniqid(mt_rand(), true));   
    $uuid  = substr($str,0,8) . '-';   
    $uuid .= substr($str,8,4) . '-';   
    $uuid .= substr($str,12,4) . '-';   
    $uuid .= substr($str,16,4) . '-';   
    $uuid .= substr($str,20,12);   
    return $prefix . $uuid;
}

echo create_uuid();
相关文章
相关标签/搜索