TinyURL과 같은 URL 단축 서비스는 긴 URL을 더 짧고 관리하기 쉬운 문자열로 효과적으로 압축합니다. 이러한 서비스는 이 목표를 달성하기 위해 해싱 기술을 사용합니다.
그러나 TinyURL의 기본 36 정수 인코딩과 달리 실제 해시를 생성하는 PHP 함수가 이 논의의 초점이 될 것입니다. 목표는 8자 이하의 해시를 생성하는 것입니다.
URL 단축을 위한 해싱 이해
해싱은 가변 길이 입력을 변환하는 수학 연산입니다. 해시라고 하는 고정 길이 문자열로 변환됩니다. 출력은 특정 입력에 대해 고유하고 되돌릴 수 없으므로 데이터 보안 및 URL 단축에 적합합니다.
PHP 구현
다음 PHP 함수를 고려하세요. MurmurHash3 알고리즘:
<code class="php">function murmurHash3($data) { $nblocks = strlen($data) >> 2; $h1 = 0; $c1 = 0xcc9e2d51; $c2 = 0x1b873593; $r1 = 15; $r2 = 13; $m = 5; $k = 0; for ($i = 0; $i < $nblocks; $i++) { $k = $h1; $h1 = $h1 ^ (ord($data[$i*4+3]) << 24 | ord($data[$i*4+2]) << 16 | ord($data[$i*4+1]) << 8 | ord($data[$i*4])); $h1 = math_imul($h1, $c1); $h1 = ((($h1 << $r1) | ($h1 >> (32 - $r1))) ^ $m) & 0xffffffff; $k = mul($k, $c2); $k = ((($k << $r2) | ($k >> (32 - $r2))) ^ $m) & 0xffffffff; $h1 = ($h1 ^ $k) & 0xffffffff; } $tail = strlen($data) & 3; switch ($tail) { case 3: $h1 ^= ord($data[($nblocks << 2) + 2]) << 16; case 2: $h1 ^= ord($data[($nblocks << 2) + 1]) << 8; case 1: $h1 ^= ord($data[($nblocks << 2)]) & 0xff; $h1 = mul($h1, $c1); $h1 = ((($h1 << $r1) | ($h1 >> (32 - $r1))) ^ $m) & 0xffffffff; } return substr(base_convert($h1, 10, 16), 0, 8); }</code>
이 함수는 입력 문자열을 사용하여 8자 16진수 해시를 생성합니다. 결과 해시는 적절한 데이터베이스와 함께 짧은 URL 식별자로 사용될 수 있습니다.
위 내용은 PHP 해싱이 압축 URL을 생성할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!