短網址服務(如 bit.ly、t.cn)的核心在於將冗長的原始 URL 轉換為極短的代碼。最經典的做法是利用 CRC32 雜湊 取得一個無符號整數,再以 Base62(0-9、A-Z、a-z)編碼 將其轉為短字串。本文詳細拆解演算法步驟,並提供可直接使用的 PHP 函式。
sprintf('%u') 將其轉為無符號整數(範圍 0 ~ 4,294,967,295)。<?php
/**
* 產生短網址代碼
* @param string $url 原始長網址
* @return string 短代碼(Base62 編碼)
*/
function dwz($url) {
// 1. CRC32 + 無符號轉換
$code = sprintf('%u', crc32($url));
$surl = '';
// 2. Base62 編碼迴圈
while ($code) {
$mod = $code % 62;
if ($mod > 9 && $mod <= 35) {
$mod = chr($mod + 55); // 10-35 → 'A'-'Z'
} elseif ($mod > 35) {
$mod = chr($mod + 61); // 36-61 → 'a'-'z'
}
// 0-9 直接保留數字字元
$surl .= $mod;
$code = floor($code / 62);
}
return $surl;
}
// 使用範例
echo dwz('https://www.example.com/very/long/url/with/parameters?id=12345'); // 輸出類似 "aB3dE"
?>
這個演算法簡潔高效,是打造自有短網址服務的絕佳起點。