Sqids是一種功能強大的開源庫,旨在生成短而唯一的標識符,可廣泛應用于鏈接縮短、日志事件標識、對象ID生成等多個領域。這些標識符具有URL安全性,可以編碼多個數字,并且不包含任何粗話。在本文中,我們將深入探討Sqids的用途和限制,并探討其在數據管理和標識方面的重要性
什么是 Sqids?
Sqids(發(fā)音為“squids”)是一個小型庫,可讓您從數字生成唯一的 ID。它有利于鏈接縮短、快速且 URL 安全的 ID 生成以及解碼回數字,以便更快地進行數據庫查找。
它有什么用處?
用于鏈接縮短,為日志生成唯一事件ID,為網站上的產品/對象生成ID(就像YouTube為視頻所做的那樣),為文本消息生成短ID,郵件確認代碼等。
它不適用于什么?
任何不敏感的數據。生成的ID不是哈希值,可以解碼回數字。例如,它們可能不是用戶ID的好選擇,因為一旦解碼,它們可能會透露您應用的用戶數量。
可以同時編碼多個數字嗎?
可以。Sqids可以將一個或多個非負數編碼為單個ID。您可以編碼的數字數量沒有限制,但可以編碼的數字大小有限(取決于實現(xiàn)語言)。出于幾個原因很有用:您可以編碼UNIX時間戳并創(chuàng)建過期ID,或者您可以將數據庫分片號與主鍵一起編碼,并節(jié)省額外的數據庫查詢。
生成的ID是唯一的嗎?
是的,生成的ID對于輸入和字母表是唯一的。請記住,默認字母表包含大寫和小寫字母,因此默認ID是區(qū)分大小寫的。
Sqids 有什么限制?
- Sqids無法編碼負數。
- 最小字母表長度為3個字符。
- 字母表不能包含任何多字節(jié)字符。
- Sqids不能生成特定長度的ID,只能生成至少特定長度的ID。最小長度參數范圍介于0和255之間。
- Sqids可以嘗試重新生成ID,直到字母表長度減一。
Sqids應用
安裝
composer require sqids/sqids
示例代碼
1.簡單的解碼和編碼
$sqids = new Sqids();
$id = $sqids->encode([1, 2, 3]); // "86Rf07"
$numbers = $sqids->decode($id); // [1, 2, 3]
注意:由于算法的設計,多個ID可以解碼回相同的數字序列。如果ID是規(guī)范的對您的設計很重要,您必須手動重新編碼解碼的數字并檢查生成的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. 防止特定單詞出現(xiàn)在自動生成的ID中的任何位置
$sqids = new Sqids(blocklist: ['86Rf07']);
$id = $sqids->encode([1, 2, 3]); // "se8ojk"
$numbers = $sqids->decode($id); // [1, 2, 3]
總結
Sqids作為一種開源庫,提供了生成短的唯一標識符的功能。它在鏈接縮短、日志事件標識、產品/對象ID生成以及文本消息和郵件確認代碼等方面具有廣泛的應用。然而,需要注意的是,由于生成的ID可以解碼回數字,不適合用于敏感數據或用戶ID等敏感信息的存儲。Sqids的靈活性和獨特性使其成為各種應用場景下的有用工具。