HexDecは、16進列の文字列を10進数に変換するためのPHP組み込み関数です。例えば:
<?php
echo hexdec('1a'); // 出力 26
?>
ただし、 HexDecは文字列(0-9、AF)の数字と16進数の文字のみを処理できることに注意する必要があります。入力に非ヘキサード測量文字(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整数の範囲を超えている可能性があり、その結果、ヘックスデックは正しい結果のみを返します。
PHP整数は、64ビットシステムで最大64ビットの長い数値をサポートしています。 32バイトのuuidの場合、それらをヘックスデックに直接変換すると、しばしばオーバーフローします。解決:
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);
?>
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変換された値は、ソートと迅速な検索に使用されます。
プロジェクトに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