短链分析

目前大部分场景下都是长连接，为了各种目的（短信等平台字符限制）进而产生了短链

短链生成

通过哈希算法生成

通过发号器生成

二者最后都可以通过 base 算法减少长度

哈希算法生成

可能 hash 冲突

Copy
// 1.hash
func GenerateShortenUrl(initUrl, userID string) string {
// 通过 256 加密
urlSHA256 := sha256f(initUrl + userID)
genNum := new(big.Int).SetBytes(urlSHA256).Uint64()
// base 58 不包括误导性字母 o,O,I,l和+,/
// 减少字符长度
return base58Encoded([]byte(fmt.Sprintf("%d", genNum)))[0:8]
}

func sha256f(input string) []byte {
hashed := sha256.Sum256([]byte(input))
return hashed[:]
}

func base58Encoded(input []byte) string {
encoded, err := base58.BitcoinEncoding.Encode(input)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
return string(encoded)
}

发号器生成

通过雪花算法生成 id

重定向

一般通过 302 重定向，301永久重定向会在浏览器留下缓存，无法通过访问短链统计数据

参考

浅谈短链的设计