PHPUUID验证怎么判断版本

wen PHP项目 1

本文目录导读:

PHPUUID验证怎么判断版本

  1. UUID结构简要说明
  2. 判断UUID版本的代码示例
  3. 更简洁的单行判断
  4. 常见UUID版本特征
  5. 完整验证函数
  6. 注意事项

在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;
}

注意事项

  1. 索引位置:UUID字符串中版本号位于第14个字符(索引13或14,取决于实现)
  2. 大小写:UUID通常为小写,但验证时应不区分大小写
  3. 格式验证:始终先验证UUID格式,再获取版本号
  4. 性能优化:如果仅需版本号,可以使用字符串索引而非正则表达式

这个实现可以帮助你准确判断任何UUID字符串的版本号,并进行有效的验证。

抱歉,评论功能暂时关闭!