php GUID生成函数和类

 这篇文章主要介绍了使用php生成GUID的方法,分别使用了函数和类的方式生成GUID,详细介绍了什么是GUID、GUID的优点等,需要的朋友可以参考下

一、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    
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类使用方法:
 
代码如下:
require_once("guid.class.php");    
$Guid = new Guid();    
print $Guid->toString();
 

时间: 2024-10-03 02:48:57

php GUID生成函数和类的相关文章

php GUID生成函数和类_php实例

一.GUID简介GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性.GUID 主要用于在拥有多个节点.多台计算机的网络或系统中,分配必须具有唯一性的标识符.在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项.类及接口标识.数据库.系统目录等对象.GUID 的格式

在ASP.NET中创建GUIDa

asp.net|guid|创建 基础知识 GUID代表全球唯一识别符.正如名字所表示的,这些数字从统计上来说是唯一的,这就意味着在全世界不会有两个GUID完全相同.这是为什么呢? 一个 GUID是一个128位的数字,通常用一个32位的十六进制字符串来表示,就象这样:3e4dab67-ac0b-47cc-b1cf-40f93324350f 两个GUID相等的几率是 1/2128 ,几乎为0. 由于它们的唯一性,GUID可以被用在需要唯一关键字的应用程序中,但是这种情况下的关键字是不能组合起来生成一

COM基础

COM是一种二进制规范,致力于实施可相互操作的对象.例如,COM认为一个对象的二进制布局必须能够调用另一个COM对象里的服务.由于是对二进制布局的一种描述,所以只要某种语言能生成这样的一种布局,就可通过它实现COM对象.通常,程序员不必关注象这样的一些低级细节,因为编译器可自动生成正确的布局.例如,假设您的程序是用C++写的,那么大多数编译器都能生成符合COM规范的一张虚拟函数表格.对那些不生成可执行代码的语言,比如VB和Java,在运行期则会自动挂接到COM. COM库也提供了几个基本的函数,

.net程序员应该掌握的常用类库(二)

GC类 它可以通过编程使用一个静态的成员集合与垃圾回收器进行交互. 一般只有使用那托管代码是才需要用到System.GC类 垃圾回收由以下步骤组成: 1. 垃圾回收器搜索托管代码中引用的托管对象. 2. 垃圾回收器尝试完成没有被引用的对象. 3. 垃圾回收器释放没有被引用的对象并回收它们的内存. Guid类 表示全局唯一标识符 (GUID). 这个类园子里讨论比较火热. 大家可以看看以下面几篇文章 关于GUID 使用Guid做主键和int做主键性能比较 ICloneable 接口 支持克隆,即用

GPT和parted命令详解(原创)

GPT概述 全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构.它是可扩展固件接口标准的一部分,用来替代BIOS中的主引导记录分区表. 传统的主启动记录 (MBR) 磁盘分区支持最大卷为 2.2 TB (terabytes) ,每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器). 与MBR 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 千兆兆字节 (exabyte

activex-请教 Qt调用ActiveX 其中ActiveX又应用了dll

问题描述 请教 Qt调用ActiveX 其中ActiveX又应用了dll 小弟今天遇到一个问题,我用vs2010 C#语言写了一个ActiveX控件给Qt使用,其中该控件又引用了其他的dll,我发现dll中的功能函数没有起到作用,而我在vs2010环境下通过同样的调用方式是可以的,但是Qt调用的时候,只有ActiveX包含的函数起作用,比如创建文件等,但是dll中加入创建文件的代码就不起作用,请路过的大神帮我看看,小弟感激不尽. 解决方案 C#可正常工作//根据classId获取ActiveX类

MBR &amp; GPT[转]

MBR 和 GPT 的问题已经走到了非常现实的阶段-3T硬盘开始普及.MBR 由于对 3T 硬盘寻址无法支持,终于要开始被弃用了.但仅仅只是"开始",我感觉至少10年之内 MBR 还不会消失.恐怕当GPT适应不了需求的时候,MBR才会消失. 一.MBR 的失误 说"失误"牵强了一点.我们不能要求当年只有5M的硬盘就扣出2M来放寻址信息.计算机永远比你想象的要发展的快. 首先你要有一些基本的硬盘的MBR知识,如果你不熟悉,可以先在 wiki 看一看硬盘的基本结构. 在

分布式ID生成器的剖析与设计

ID是身份标识,你所涉及的每类业务都会有一个,身份证, 手机号, QQ号.那么问题来了,如何设计一个算法,能快速生成ID又能有效地避免冲突.往小了说,在存储领域每一行数据都会有一个ID,关系型数据库有 auto increment, 非关系型数据库,如mongodb有自己的objectID 算法.对于各种ID我们可以简化为2类:1.去中心化,统一长度,规则占坑类, mongodb属于这一类, guid 属于这类类.2.中心化,ID自增,auto increment属于这一类. mongodb i

C写com 类厂的guid iukonwn的guid怎么来的 ?

问题描述 C写com 类厂的guid iukonwn的guid怎么来的 ? 类厂的guid 和 iukonwn的guid怎么来的? 1 是自己定义:2 还还引用系统定义? 如果过是2 怎么写代码? 我自己定义过 类厂 guid 和 iukown的guid 似乎不能正确工作. 解决方案 Com GUID 解决方案二: Com GUID