让冗长网址化繁为简,「快缩短网址」——suo.run,以三行优雅代码,重塑链接之美。
一、为何缩短
1. 内容留白:腾出字符,让推文、短信、海报回归简洁。
2. 体验至上:一眼可读,一触即达,用户无需在乱码中迷路。
3. 数据归拢:后台集中管理,点击、地域、设备,一目了然。
二、三步落成
1. 算法:把浩瀚长链凝成六字符诗。
2. 存储:Redis 轻舞,MySQL 稳守,冷热双生。
3. 实现:下面奉上三段心法,任君采撷。
三、心法总览
• 进制折叠:十进制 → 六十二进制,短而有序,唯长度随风。
• 哈希分段:MD5 散花,四瓣八位,再裁五刀,拼成六符。
• 随机探戈:掷骰子般生成,碰撞即重来,简单却带野性。
四、源码如诗
1. 进制折叠
private function encode(int $id, string $alphabet): string {
$base = strlen($alphabet);
$code = '';
do {
$code = $alphabet[$id % $base] . $code;
$id = intdiv($id, $base);
} while ($id > 0);
return $code;
}
<img src="https://suo.run/uploads/20251015/43.png" alt="" class="img-fluid" />
private function decode(string $code, string $alphabet): int {
$base = strlen($alphabet);
$id = 0;
foreach (str_split($code) as $char) {
$id = $id * $base + strpos($alphabet, $char);
}
return $id;
}
2. 哈希分段
function shortenByHash(string $long): array {
$alphabet = 'abcdefghijklmnopqrstuvwxyz012345';
$md5 = md5($long, true); // 16 字节
$tokens = [];
for ($i = 0; $i < 4; $i++) {
$chunk = unpack('N', substr($md5, $i * 4, 4))[1];
$chunk &= 0x3FFFFFFF;
$short = '';
for ($j = 0; $j < 6; $j++) {
$short .= $alphabet[$chunk & 0x1F];
$chunk >>= 5;
}
$tokens[] = $short;
}
return $tokens; // 一次产出四枚,可择优而用
}

3. 随机探戈
function randomCode(int $len = 6): string {
$pool = 'abcdefghkmnpqrstuvwxyz23456789';
$code = '';
for ($i = 0; $i < $len; $i++) {
$code .= $pool[random_int(0, strlen($pool) - 1)];
}
return $code;
}
五、高并发锦囊
• 预生成:批量随机码灌入队列,削峰填谷。
• 布隆过滤:O(1) 级去重,Redis 位图轻如鸿毛。
• 双写保障:先写缓存,再异步落盘,毫秒级响应。
六、即刻启程
复制以上任一段,嵌入你的工程,或直赴 suo.run,一键缩短,让每一次分享都轻盈如诗。