php GUID生成函数和类


Posted in PHP onMarch 10, 2014

一、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();
PHP 相关文章推荐
PHP Pear 安装及使用
Mar 19 PHP
php判断是否为json格式的方法
Mar 04 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
PHP中把有符号整型转换为无符号整型方法
May 27 PHP
详解php中 === 的使用
Oct 24 PHP
php mysql实现mysql_select_db选择数据库
Dec 30 PHP
Laravel中log无法写入问题的解决
Jun 17 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
详解将数据从Laravel传送到vue的四种方式
Oct 16 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
PHP二维数组分页2种实现方法解析
Jul 09 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 #PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 #PHP
php实现文件编码批量转换
Mar 10 #PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 #PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 #PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 #PHP
php function用法如何递归及return和echo区别
Mar 07 #PHP
You might like
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
php单件模式结合命令链模式使用说明
2008/09/07 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
DOM 高级编程
2015/05/06 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
Python中处理unchecked未捕获异常实例
2015/01/17 Python
浅析Python中的多重继承
2015/04/28 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
python生成ppt的方法
2018/06/07 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
python3安装speech语音模块的方法
2018/12/24 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
银行会计业务的个人自我评价
2013/11/02 职场文书
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
高三学生评语大全
2014/04/25 职场文书
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python