hexdec是PHP 內置函數,用於將十六進製字符串轉換成十進制數字。比如:
<?php
echo hexdec('1a'); // 輸出 26
?>
但是需要注意的是, hexdec只能處理字符串中的數字和十六進製字符(0-9,af),如果輸入中包含非十六進製字符(例如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只能返回部分正確結果。
PHP 的整數在64 位系統上最大支持到64 位長的數字,對於32 字節的UUID,直接用hexdec轉換往往會溢出。解決方案:
使用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);
?>
只取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 轉換後的數值用於排序和快速查找。
如果你的項目中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