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应用程序来获取Web服务器的状态信息
Oct 09 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
php 函数使用方法与函数定义方法
May 09 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
Oct 03 PHP
PHP中常用的字符串格式化函数总结
Nov 19 PHP
浅析php原型模式
Nov 25 PHP
PHP获取当前文件的父目录方法汇总
Jul 21 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 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
php中的时间处理
2006/10/09 PHP
PHP教程 变量定义
2009/10/23 PHP
php array_walk() 数组函数
2011/07/12 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
phalcon框架使用指南
2016/02/23 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
详解python的几种标准输出重定向方式
2016/08/15 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
python中selenium库的基本使用详解
2020/07/31 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
新员工培训个人的自我评价
2013/10/09 职场文书
职业教育毕业生求职信
2013/11/09 职场文书
美发活动策划书
2014/01/14 职场文书
教学实习自我评价
2014/01/28 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python