什麽是 Sqids?
Sqids 是一個開源庫,可以從數位生成短的唯一識別元。這些識別元是 URL 安全的,可以編碼多個數位,並且不包含常見的粗話。
它有什麽用處?
用於連結縮短,為日誌生成唯一事件ID,為網站上的產品/物件生成ID(就像YouTube為視訊所做的那樣),為文本訊息生成短ID,信件確認程式碼等。
它不適用於什麽?
任何不敏感的數據。生成的ID不是哈希值,可以解碼回數位。例如,它們可能不是使用者ID的好選擇,因為一旦解碼,它們可能會透露您套用的使用者數量。
可以同時編碼多個數位嗎?
可以。Sqids可以將一個或多個非負數編碼為單個ID。您可以編碼的數位數量沒有限制,但可以編碼的數位大小有限(取決於實作語言)。出於幾個原因很有用:您可以編碼UNIX時間戳並建立過期ID,或者您可以將資料庫分片號與主鍵一起編碼,並節省額外的資料庫查詢。
生成的ID是唯一的嗎?
是的,生成的ID對於輸入和字母表是唯一的。請記住,預設字母表包含大寫和小寫字母,因此預設ID是區分大小寫的。
Sqids 有什麽限制?
Sqids無法編碼負數。
最小字母表長度為3個字元。
字母表不能包含任何多字節字元。
Sqids不能生成特定長度的ID,只能生成至少特定長度的ID。最小長度參數範圍介於0和255之間。
Sqids可以嘗試重新生成ID,直到字母表長度減一。
套用
安裝
composer require sqids/sqids
案例
1. 簡單的解碼和編碼
$sqids = new Sqids();
$id = $sqids->encode([1, 2, 3]); // "86Rf07"
$numbers = $sqids->decode($id); // [1, 2, 3]
註意: 由於演算法的設計,多個ID可以解碼回相同的數位序列。如果ID是規範的對您的設計很重要,您必須手動重新編碼解碼的數位並檢查生成的ID是否匹配。
2. 強制ID的最小長度
$sqids = new Sqids(minLength: 10);
$id = $sqids->encode([1, 2, 3]); // "86Rf07xd4z"
$numbers = $sqids->decode($id); // [1, 2, 3]
3. 透過提供自訂字母表隨機化ID
$sqids = new Sqids(alphabet: 'FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE');
$id = $sqids->encode([1, 2, 3]); // "B4aajs"
$numbers = $sqids->decode($id); // [1, 2, 3]
4. 防止特定單詞出現在自動生成的ID中的任何位置
$sqids = new Sqids(blocklist: ['86Rf07']);
$id = $sqids->encode([1, 2, 3]); // "se8ojk"
$numbers = $sqids->decode($id); // [1, 2, 3]
更多了解:https://github.com/sqids/sqids-php