HEXDEC 은 육각형 문자열을 10 진수 숫자로 변환하기위한 PHP 내장 기능입니다. 예를 들어:
<?php
echo hexdec('1a'); // 산출 26
?>
그러나 Hexdec은 문자열 (0-9, AF)에서 숫자와 16 진 문자 만 처리 할 수 있습니다. 입력에 비 헬스 캐릭터 문자 (예 : UUID- 의 짧은 수평선)가 포함 된 경우 먼저 문자열을 청소해야합니다.
UUID는 일반적으로 다음과 같습니다.
550e8400-e29b-41d4-a716-446655440000
헥 데크를 사용하여 처리하려면 먼저 중간에 짧은 수평선을 제거합니다.
<?php
$uuid = '550e8400-e29b-41d4-a716-446655440000';
$cleanUuid = str_replace('-', '', $uuid);
echo hexdec($cleanUuid);
?>
참고 : UUID가 더 길기 때문에 (32 16 진수) 소수점 값이 PHP 정수의 범위를 초과하여 HEXDEC가 올바른 결과 만 반환합니다.
PHP 정수는 64 비트 시스템에서 최대 64 비트 길이의 숫자를 지원합니다. 32 바이트 UUID의 경우 HEXDEC 로 직접 변환하면 종종 오버플로됩니다. 해결책:
BC 수학 또는 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 에 전달 된 문자열에 16 진 문자 만 포함되도록하십시오.
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