Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah PHP Hashing Menjana URL Padat?

Bolehkah PHP Hashing Menjana URL Padat?

DDD
DDDasal
2024-10-19 12:14:29513semak imbas

Can PHP Hashing Generate Compact URLs?

Menjana URL Padat dengan Pencincangan PHP

Perkhidmatan memendekkan URL seperti TinyURL secara berkesan memekatkan URL yang panjang menjadi rentetan yang lebih pendek dan lebih terurus. Perkhidmatan ini menggunakan teknik pencincangan untuk mencapai matlamat ini.

Walau bagaimanapun, tidak seperti pengekodan integer asas 36 TinyURL, fungsi PHP yang mencipta cincang sebenar akan menjadi tumpuan perbincangan ini. Matlamatnya adalah untuk menjana cincangan yang tidak lebih daripada 8 aksara.

Memahami Pencirian untuk Pemendekkan URL

Pencapaian ialah operasi matematik yang mengubah input panjang berubah-ubah menjadi rentetan panjang tetap yang dipanggil cincang. Output adalah unik untuk input tertentu dan tidak boleh diterbalikkan, menjadikannya sesuai untuk keselamatan data dan memendekkan URL.

Pelaksanaan PHP

Pertimbangkan fungsi PHP berikut berdasarkan Algoritma 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>

Fungsi ini mengambil rentetan input dan menjana cincang perenambelasan 8 aksara. Cincang yang terhasil boleh digunakan sebagai pengecam URL pendek bersama-sama dengan pangkalan data yang sesuai.

Atas ialah kandungan terperinci Bolehkah PHP Hashing Menjana URL Padat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn