TinyURL のような URL 短縮サービスは、長い URL をより短く管理しやすい文字列に効果的に圧縮します。これらのサービスは、この目標を達成するためにハッシュ技術を採用しています。
ただし、TinyURL の Base 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 中国語 Web サイトの他の関連記事を参照してください。