天天看點

php 生成guid_php生成全球唯一辨別符guid的算法示例

1,建立php類庫檔案-guid.php

// guid.php

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 getHost($coumputer_name, $ip) { // static

$address = new NetAddress();

$address->name = $coumputer_name;

$address->ip = $ip;

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($computer_name, $ip){

$this->getGuid($computer_name, $ip);

}

//by www.jbxue.com

function getGuid($coumputer_name, $ip){

$address = NetAddress::getHost($coumputer_name, $ip);

$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);

}

}

?>

2,調用示例,生成唯一的Gid:

require_once('guid.php'); //調用類庫檔案

$computer_name = $_SERVER["SERVER_NAME"];

$ip = $_SERVER["SERVER_ADDR"];

$guid = new Guid($computer_name, $ip);

print $guid->toString();

//輸出結果:3238D32E-807C-B1C4-01C4-FD1346D32110

?>