一、guid简介
guid: 即globally unique identifier(全球唯一标识符) 也称作 uuid(universally unique identifier) 。
guid是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。guid 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。
在 windows 平台上,guid 广泛应用于微软的产品中,用于标识如如注册表项、类及接口标识、数据库、系统目录等对象。
guid 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。
例如:6f9619ff-8b86-d011-b42d-00c04fc964ff 即为有效的 guid 值。
二、guid的优点
1.guid在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。
2.世界上的任何两台计算机都不会生成重复的 guid 值。
3.需要guid的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
4.guid的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。
三、guid生成函数
复制代码 代码示例:
function create_guid() {
$charid = strtoupper(md5(uniqid(mt_rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123)// "{"
.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;
}
三、guid生成类
php获得guid类:guid_class.php
复制代码 代码示例:
<?php
//获取guid
//事理:www.jb200.com
class system
{
function currenttimemillis()
{
list($usec, $sec) = explode(" ",microtime());
return $sec.substr($usec, 2, 3);
}
}
class netaddress
{
var $name = 'localhost';
var $ip = '127.0.0.1';
function getlocalhost() // static
{
$address = new netaddress();
$address->name = $_env["computername"];
$address->ip = $_server["server_addr"];
return $address;
}
function tostring()
{
return strtolower($this->name.'/'.$this->ip);
}
}
class random
{
function nextlong()
{
$tmp = rand(0,1)?'-':'';
return $tmp.rand(1000, 9999).rand(1000, 9999).rand(1000, 9999).rand(100, 999).rand(100, 999);
}
}
// 三段
// 一段是微秒 一段是地址 一段是
随机数
class guid
{
var $valuebeforemd5;
var $valueaftermd5;
function guid()
{
$this->getguid();
}
//
function getguid()
{
$address = netaddress::getlocalhost();
$this->valuebeforemd5 = $address->tostring().':'.system::currenttimemillis().':'.random::nextlong();
$this->valueaftermd5 = md5($this->valuebeforemd5);
}
function newguid()
{
$guid = new guid();
return $guid;
}
function tostring()
{
$raw = strtoupper($this->valueaftermd5);
return substr($raw,0,8).'-'.substr($raw,8,4).'-'.substr($raw,12,4).'-'.substr($raw,16,4).'-'.substr($raw,20);
}
}
调用示例,guid类使用方法:
复制代码 代码示例:
<?php
require_once("guid.class.php");
$guid = new guid();
print $guid->tostring();