現在の位置: ホーム> 最新記事一覧> UUIDまたはGUIDを処理するためにHexDec関数を使用するための実用的なヒントは何ですか?

UUIDまたはGUIDを処理するためにHexDec関数を使用するための実用的なヒントは何ですか?

gitbox 2025-06-11

HexDec機能とは何ですか?

HexDecは、16進列の文字列を10進数に変換するためのPHP組み込み関数です。例えば:

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

ただし、 HexDecは文字列(0-9、AF)の数字と16進数の文字のみを処理できることに注意する必要があります。入力に非ヘキサード測量文字(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の16進数文字)、その小数値はPHP整数の範囲を超えている可能性があり、その結果、ヘックスデックは正しい結果のみを返します。


整数範囲を超えるUUIDを処理する方法

PHP整数は、64ビットシステムで最大64ビットの長い数値をサポートしています。 32バイトのuuidの場合、それらをヘックスデックに直接変換すると、しばしばオーバーフローします。解決:

  1. BC MathまたはGMP Extension <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の短い水平線をきれいにして、ヘックスデックに渡された弦に160文字のみが含まれていることを確認します。

  • HexDecを使用して長すぎるUUIDを変換するには、BCMATHまたはGMPを使用して大量の変換を実装することをお勧めします。

  • 要件に従って、変換のためにUUIDの一部を抽出し、数値範囲を減らします。

  • データベースインデックス設計と組み合わせると、UUID変換された値は、ソートと迅速な検索に使用されます。


追加のヒント: HexDecを使用して、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