推廣碼核心需求:不可重複、不可推測。本文分析三類主流方案並深入實作演算法法。
8000E0V0S1D)。需連線資料庫取主鍵,可預生成批次更新提升效率。去除連字號後 32 字元,雖幾乎絕對不重複且支援高併發,但長度不實用。
輸出長度固定且較長,淘汰。
RC4 密文長度等於明文長度。以自增數字為明文、固定金鑰加密,但原始密文含非字母數字字元,不可直接給用戶。轉 16 進制後長度加倍但可接受,然密文具連續性可被推測,且固定金鑰易破解。
將金鑰改為每次生成的 UUID,密文不再具推測性,滿足不可推測需求。實測 7 位數字明文加密後轉 16 進制,生成 100 萬筆零重複,效能優異。
// 核心邏輯:RC4 加密 + UUID 金鑰 + Hex 編碼
String plainText = String.format("%07d", sequenceNumber); // 7 位數字
String key = UUID.randomUUID().toString().replace("-", "");
String cipher = RC4.encrypt(plainText, key);
String inviteCode = bytesToHex(cipher.getBytes());
RC4 演算法網路廣泛可用,本文不贅述實作細節。關鍵在於明文用自增序列保證唯一性、金鑰用 UUID 打破規律性、Hex 編碼轉為可見字元。
| 指標 | 表現 |
|---|---|
| 唯一性 | 數學保證(自增序列不重複 + RC4 可逆) |
| 不可推測 | UUID 金鑰每次不同,密文無規律 |
| 長度 | 明文 n 位 → 密文 2n 位(Hex),7 位→14 字元,可接受 |
| 效能 | 純記憶體運算,無 I/O,極高併發支援 |
| 依賴 | 零外部依賴,無需資料庫協調 |
適用於高併發、大量生成、離線生成等場景。若有特殊字元集需求,可替換 Hex 為 Base62 或自訂編碼。