UUID(Universally Unique Identifier,通用唯一识别码)是指在一台机器上生成的数字,它能保证在同一时空中的所有机器都是唯一的。通常平台会提供生成 UUID 的 API。UUID 按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片 ID 码和许多可能的数字。其核心组成部分包括:当前日期和时间(UUID 的第一个部分与时间有关,若短时间内连续生成,第一部分不同,其余相同)、时钟序列、全局唯一的 IEEE 机器识别号(若有网卡则从网卡获取,否则以其他方式获取)。UUID 的唯一缺陷在于生成的结果字符串较长。关于 UUID 这个标准,使用最普遍的是微软的 GUID(Globally Unique Identifiers)。
在 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)。
以下代码提供了一个兼容性良好的 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;
}
}
?>
md5() 生成 32 位十六进制字符串。在现代 PHP(7.0+)项目中,推荐使用 random_bytes() 或 ramsey/uuid 等成熟库,以获得更高的加密安全性和标准兼容性。上述函数适用于遗留系统维护或无扩展安装权限的环境。