本文目录导读:

在PHP中判断UUID的版本,可以通过分析UUID字符串的特定位置来实现,UUID的版本信息存储在第13个字符(索引12)的位置。
UUID结构简要说明
UUID格式:xxxxxxxx-xxxx-Vxxx-xxxx-xxxxxxxxxxxx
V位置即为版本号(第13个字符)
判断UUID版本的代码示例
<?php
/**
* 获取UUID的版本号
* @param string $uuid UUID字符串
* @return int|null 返回版本号(1-8),无效UUID返回null
*/
function getUuidVersion(string $uuid): ?int
{
// 验证UUID格式
$pattern = '/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i';
if (!preg_match($pattern, $uuid)) {
return null;
}
// 获取版本号(第13个字符,索引12)
$versionChar = $uuid[12];
$version = hexdec($versionChar);
// 版本号范围1-8
if ($version >= 1 && $version <= 8) {
return $version;
}
return null;
}
// 测试示例
$uuids = [
'550e8400-e29b-41d4-a716-446655440000', // v4
'f47ac10b-58cc-4372-a567-0e02b2c3d479', // v4
'6ba7b810-9dad-11d1-80b4-00c04fd430c8', // v1
'00000000-0000-3000-8000-000000000000', // v3
'00000000-0000-5000-8000-000000000000', // v5
];
foreach ($uuids as $uuid) {
$version = getUuidVersion($uuid);
echo "UUID: $uuid\n";
echo "版本: " . ($version !== null ? "v$version" : "无效") . "\n\n";
}
更简洁的单行判断
<?php
/**
* 快速获取UUID版本号(不验证格式)
*/
function quickUuidVersion(string $uuid): ?int
{
if (strlen($uuid) !== 36) {
return null;
}
$version = hexdec($uuid[14]); // 注意:部分实现使用索引14
return ($version >= 1 && $version <= 8) ? $version : null;
}
常见UUID版本特征
| 版本 | 第13个字符 | 说明 |
|---|---|---|
| v1 | 1 | 基于时间+MAC地址 |
| v2 | 2 | DCE安全版本 |
| v3 | 3 | 基于MD5哈希 |
| v4 | 4 | 随机生成 |
| v5 | 5 | 基于SHA-1哈希 |
| v6 | 6 | 基于时间的重新排序 |
| v7 | 7 | 基于时间戳+随机 |
| v8 | 8 | 自定义生成 |
完整验证函数
<?php
/**
* 验证UUID并返回详细信息
*/
function validateUuid(string $uuid): array
{
$result = [
'valid' => false,
'version' => null,
'variant' => null,
'error' => null
];
// 基本格式验证
$pattern = '/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i';
if (!preg_match($pattern, $uuid)) {
$result['error'] = 'Invalid UUID format';
return $result;
}
// 获取版本号
$versionChar = $uuid[14];
$version = hexdec($versionChar);
if ($version < 1 || $version > 8) {
$result['error'] = "Invalid version: $version";
return $result;
}
$result['valid'] = true;
$result['version'] = $version;
$result['variant'] = ($uuid[19] === '8' || $uuid[19] === '9' ||
$uuid[19] === 'a' || $uuid[19] === 'b') ? 'RFC 4122' : 'Other';
return $result;
}
注意事项
- 索引位置:UUID字符串中版本号位于第14个字符(索引13或14,取决于实现)
- 大小写:UUID通常为小写,但验证时应不区分大小写
- 格式验证:始终先验证UUID格式,再获取版本号
- 性能优化:如果仅需版本号,可以使用字符串索引而非正则表达式
这个实现可以帮助你准确判断任何UUID字符串的版本号,并进行有效的验证。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播