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 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
php使用异或实现的加密解密实例
Sep 04 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
php数组函数array_walk用法示例
May 26 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
thinkPHP5分页功能实现方法分析
Oct 25 PHP
PHP实现简易计算器功能
Aug 28 PHP
CI框架网页缓存简单用法分析
Dec 26 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版(1)
2006/10/09 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python字符串中查找子串小技巧
2015/04/10 Python
python访问抓取网页常用命令总结
2017/04/11 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
使用python编写监听端
2018/04/12 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
python 19个值得学习的编程技巧
2020/08/15 Python
HTML5标签小集
2011/08/02 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
Linux的主要特性
2014/10/06 面试题
计算机应用职专应届生求职信
2013/11/12 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
Python基础教程,Python入门教程(超详细)
2021/06/24 Python
php png失真的原因及解决办法
2021/10/24 PHP