Heim  >  Artikel  >  Backend-Entwicklung  >  php生成全球唯一标识符guid的算法示例

php生成全球唯一标识符guid的算法示例

WBOY
WBOYOriginal
2016-07-25 08:57:18982Durchsuche
本文介绍下,php生成全球唯一标识符guid的例子,有需要的朋友参考下。

1,创建php类库文件-guid.php

<?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 bbs.it-home.org
 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:

<?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
?>


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn