無償分享?有$既我幫你諗晒成個solution都冇問題題外話巴打可唔可以分享下你嘅簡單做法
如果連登啲short link algorithm 真係好似你咁講又base42又base25又一堆reserved characters做case
真心覺得黐線
簡單事情複雜化到政府 out source project 咁
連狗發明short link 版攞你命三千
Requirements:
- client side gen/parse only
- short id 需要支援以下三種 data struct:
1. thread id only (thread_id: 12345678)
2. thread id + page (thread_id: 12345678, page: 41)
3. thread id + 樓層 (thread_id: 12345678, post: 1001)
- path 需要支援純數字 thread id (例如 lih.kg/123 一定係去返 thread id 123)
- 盡量以最短字數 link 為目標
- 唔可以有 I (大寫 i) 同 l (小寫L) 因為會易混淆
冇既話... 唔花太多時間
基本做法你可以睇返#16
簡單黎講就split 64bit既 integer
你thread id 就 fix用46 bits timestamp(基本上夠用到死嗰日,以我所知你地係用incremental id? 咁仲可以慳多啲)
剩低18 bits 再split 開用途
你point2/3, 用2 bit 嚟做 case(max 4 cases)分page/post,剩低2個備用
用8bit做(0-65535 夠做有凸喇)做page/post id
剩返既留4bit做 reserve? 你自己決定,留多既 trade off就係 short link會長啲,當留4bit咁即係條id總長度就46+2+8+4 = 60 bits既base64 string, 最長唔超10 characters
至於path 要純數字,用single character sub-path/sub-domain 做, 唔好同short link 撈埋一碟, 凡齋thread id 既route 去: lih.kg/i/1234 或 i.lih.kg/1234, 或者倒轉:short link用 lih.hk/s/aaaa或 s.lih.hk/aaaa
唔可以有i/l?自己做 lookup table 囉,你唔要兩個 characters, 基本上唔會有其他characters 可以replace,即係要自己做 base62既implementation, 但我自己就唔會咁做,一嚟條 link變長咗,2嚟大如 google(youtube) 都唔會咁做,再者而家乜都係 copy & paste 既時代 - 簡單黎講short link需要高可讀性既情況係十分之低,換言之: 冇必要
唔覺唔覺都打咗咁多
sor, 上面 page/post id 嗰part 有錯,用12bit (0-4095)做,留reserve 就64bit 用晒或唔留reserve, 60bit 不變