Home  >  Article  >  Backend Development  >  Can PHP Hashing Generate Compact URLs?

Can PHP Hashing Generate Compact URLs?

DDD
DDDOriginal
2024-10-19 12:14:29510browse

Can PHP Hashing Generate Compact URLs?

Generating Compact URLs with PHP Hashing

URL shortening services like TinyURL effectively condense long URLs into shorter, more manageable strings. These services employ hashing techniques to achieve this goal.

However, unlike TinyURL's base 36 integer encoding, a PHP function that creates a true hash will be the focus of this discussion. The goal is to generate a hash that is no longer than 8 characters.

Understanding Hashing for URL Shortening

Hashing is a mathematical operation that transforms a variable-length input into a fixed-length string called a hash. The output is unique for a given input and irreversible, making it suitable for data security and URL shortening.

A PHP Implementation

Consider the following PHP function based on the MurmurHash3 algorithm:

<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>

This function takes an input string and generates an 8-character hexadecimal hash. The resulting hash can be used as a short URL identifier in conjunction with an appropriate database.

The above is the detailed content of Can PHP Hashing Generate Compact URLs?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn