1. 定义[详细介绍]
UUID含义是 通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,
UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。 UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。 (2)时钟序列。 (3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。 UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。 而 标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。
插入: 在使用之前, 强烈建议看下 https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid 中的各种回答及评论 2. 生成方式[两种] 方式一:使用函数uuid_create()函数或者com_create_guid()
使用uuid_create()函数前需要先安装uuid扩展, 安装方法如下
http://www.bubuko.com/infodetail-2390379.html(转载)
方式二:自定义函数 1. 代码
<?php
if (!function_exists('guid')) { function guid(){ $uuid = ''; if (function_exists('com_create_guid')){ return com_create_guid(); }else{ mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up. $charid = strtoupper(md5(uniqid(rand(), true))); $hyphen = chr(45);// "-" //$uuid = //chr(123)// "{" $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); //.chr(125);// "}" return $uuid; } } }
echo guid(); echo strtolower(guid()); // 转为小写
或者
private function createUUID(){ $str = self::RAND_STR; $len = strlen($str)-1; $randArray = array();
for($j = 0;$j <8;$j++){ $randStr = ''; for($i = 0;$i < 4;$i++){ $num = mt_rand(0,$len); $randStr .= $str[$num]; } array_push($randArray,$randStr); } return $randArray[0].$randArray[1].'-'.$randArray[2].'-'.$randArray[3].'-'.$randArray[4].'-'.$randArray[5].$randArray[6].$randArray[7]; }
或者
if(!function_exists('gen_uuid')){ function gen_uuid() { return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', // 32 bits for "time_low" mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
// 16 bits for "time_mid" mt_rand( 0, 0xffff ),
// 16 bits for "time_hi_and_version", // four most significant bits holds version number 4 mt_rand( 0, 0x0fff ) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res", // 8 bits for "clk_seq_low", // two most significant bits holds zero and one for variant DCE1.1 mt_rand( 0, 0x3fff ) | 0x8000,
// 48 bits for "node" mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ) ); } }
echo strtoupper(gen_uuid()); echo "<hr>";
但是PHP似乎有自己的扩展---->TBD ===> yes , it is UUID extension. |