首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 生成 UUID 格式字符串的完整指南

     編輯:PHP 相關知識

什么是 UUID?

UUID(Universally Unique Identifier,通用唯一识别码)是指在一台机器上生成的数字,它能保证在同一时空中的所有机器都是唯一的。通常平台会提供生成 UUID 的 API。UUID 按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片 ID 码和许多可能的数字。其核心组成部分包括:当前日期和时间(UUID 的第一个部分与时间有关,若短时间内连续生成,第一部分不同,其余相同)、时钟序列、全局唯一的 IEEE 机器识别号(若有网卡则从网卡获取,否则以其他方式获取)。UUID 的唯一缺陷在于生成的结果字符串较长。关于 UUID 这个标准,使用最普遍的是微软的 GUID(Globally Unique Identifiers)。

UUID 格式差异

在 ColdFusion 中可用 CreateUUID() 函数简单生成 UUID,其格式为:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制数字。而标准的 UUID 格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(8-4-4-4-12)。

PHP 实现 GUID 生成函数

以下代码提供了一个兼容性良好的 guid() 函数,优先使用 Windows COM 组件 com_create_guid(),若不存在则回退到基于 md5(uniqid(rand(), true)) 的生成方式,并按标准 GUID 格式(含大括号)拼接输出:

<?php
function guid() {
    if (function_exists('com_create_guid')) {
        return com_create_guid();
    } else {
        mt_srand((double)microtime() * 10000); // PHP 4.2.0 以上可选
        $charid = strtoupper(md5(uniqid(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;
    }
}
?>

代码解析

  • com_create_guid():Windows 环境下直接调用系统 API 生成标准 GUID,性能最优。
  • mt_srand / microtime:为随机数生成器播种,提高熵值(PHP 4.2.0+ 已自动播种,保留兼容性)。
  • uniqid(rand(), true):生成带微秒的唯一 ID,再经 md5() 生成 32 位十六进制字符串。
  • substr 拼接:按 8-4-4-4-12 分段插入连字符,首尾添加大括号,符合 GUID 规范。

使用建议

在现代 PHP(7.0+)项目中,推荐使用 random_bytes() 或 ramsey/uuid 等成熟库,以获得更高的加密安全性和标准兼容性。上述函数适用于遗留系统维护或无扩展安装权限的环境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved