當前位置: 首頁> 最新文章列表> 使用hexdec 函數處理UUID 或GUID 有哪些實用技巧?

使用hexdec 函數處理UUID 或GUID 有哪些實用技巧?

gitbox 2025-06-11

什麼是hexdec函數?

hexdec是PHP 內置函數,用於將十六進製字符串轉換成十進制數字。比如:

 <?php
echo hexdec('1a'); // 輸出 26
?>

但是需要注意的是, hexdec只能處理字符串中的數字和十六進製字符(0-9,af),如果輸入中包含非十六進製字符(例如UUID 中的短橫線- ),就必須先清理字符串。


UUID 轉數字的基本處理方法

UUID 通常形如:

 550e8400-e29b-41d4-a716-446655440000

我們想要用hexdec處理時,先移除中間的短橫線:

 <?php
$uuid = '550e8400-e29b-41d4-a716-446655440000';
$cleanUuid = str_replace('-', '', $uuid);
echo hexdec($cleanUuid);
?>

注意:由於UUID 長度較長(32 個十六進製字符),它的十進制數值可能超出PHP 整型的範圍,導致hexdec只能返回部分正確結果。


如何應對超過整型範圍的UUID

PHP 的整數在64 位系統上最大支持到64 位長的數字,對於32 字節的UUID,直接用hexdec轉換往往會溢出。解決方案:

  1. 使用BC Math 或GMP 擴展<br> 這些擴展支持任意長度的數字計算

<?php
$uuid = '550e8400-e29b-41d4-a716-446655440000';
$cleanUuid = str_replace('-', '', $uuid);

function bcHexDec($hex) {
    $dec = '0';
    $len = strlen($hex);
    for ($i = 0; $i < $len; $i++) {
        $current = hexdec($hex[$i]);
        $dec = bcmul($dec, '16');
        $dec = bcadd($dec, $current);
    }
    return $dec;
}

echo bcHexDec($cleanUuid);
?>
  1. 只取UUID 的部分字段進行轉換<br> 例如,只轉換UUID 的前8 個字符

<?php
$uuid = '550e8400-e29b-41d4-a716-446655440000';
$part = substr(str_replace('-', '', $uuid), 0, 8);
echo hexdec($part);
?>

這樣可以得到一個比較小的數字,用於索引或快速比較。


實用技巧總結

  • 先清理UUID 中的短橫線,確保傳給hexdec的字符串只包含十六進製字符。

  • 避免用hexdec轉換過長的UUID,推薦用BCMath 或GMP 實現大數轉換。

  • 根據需求,提取UUID 的一部分進行轉換,減小數值範圍。

  • 結合數據庫索引設計,將UUID 轉換後的數值用於排序和快速查找。


額外提示:用hexdec獲取URL 參數中的UUID

如果你的項目中URL 帶有UUID 參數,想快速轉換為數字處理,可以結合PHP 的$_GET

 <?php
if (isset($_GET['uuid'])) {
    $uuid = $_GET['uuid'];
    $cleanUuid = str_replace('-', '', $uuid);
    echo hexdec(substr($cleanUuid, 0, 8)); // 僅轉換前8位元
}
?>

示例訪問:

 https://gitbox.net/project/page.php?uuid=550e8400-e29b-41d4-a716-446655440000