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

  }

 

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

  }

}

?>

 

调用

<?php

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