App下載

Sqids:生成簡短唯一ID開源庫

流年絮語 2024-02-24 09:29:08 瀏覽數(shù) (2649)
反饋

Sqids是一種功能強大的開源庫,旨在生成短而唯一的標識符,可廣泛應(yīng)用于鏈接縮短、日志事件標識、對象ID生成等多個領(lǐng)域。這些標識符具有URL安全性,可以編碼多個數(shù)字,并且不包含任何粗話。在本文中,我們將深入探討Sqids的用途和限制,并探討其在數(shù)據(jù)管理和標識方面的重要性

什么是 Sqids?

Sqids(發(fā)音為“squids”)是一個小型庫,可讓您從數(shù)字生成唯一的 ID。它有利于鏈接縮短、快速且 URL 安全的 ID 生成以及解碼回數(shù)字,以便更快地進行數(shù)據(jù)庫查找。

sqids

它有什么用處?

用于鏈接縮短,為日志生成唯一事件ID,為網(wǎng)站上的產(chǎn)品/對象生成ID(就像YouTube為視頻所做的那樣),為文本消息生成短ID,郵件確認代碼等。

它不適用于什么?

任何不敏感的數(shù)據(jù)。生成的ID不是哈希值,可以解碼回數(shù)字。例如,它們可能不是用戶ID的好選擇,因為一旦解碼,它們可能會透露您應(yīng)用的用戶數(shù)量。

可以同時編碼多個數(shù)字嗎?

可以。Sqids可以將一個或多個非負數(shù)編碼為單個ID。您可以編碼的數(shù)字數(shù)量沒有限制,但可以編碼的數(shù)字大小有限(取決于實現(xiàn)語言)。出于幾個原因很有用:您可以編碼UNIX時間戳并創(chuàng)建過期ID,或者您可以將數(shù)據(jù)庫分片號與主鍵一起編碼,并節(jié)省額外的數(shù)據(jù)庫查詢。

生成的ID是唯一的嗎?

是的,生成的ID對于輸入和字母表是唯一的。請記住,默認字母表包含大寫和小寫字母,因此默認ID是區(qū)分大小寫的。

Sqids 有什么限制?

  • Sqids無法編碼負數(shù)。
  • 最小字母表長度為3個字符。
  • 字母表不能包含任何多字節(jié)字符。
  • Sqids不能生成特定長度的ID,只能生成至少特定長度的ID。最小長度參數(shù)范圍介于0和255之間。
  • Sqids可以嘗試重新生成ID,直到字母表長度減一。

Sqids應(yīng)用

安裝

composer require sqids/sqids

示例代碼

1.簡單的解碼和編碼

$sqids = new Sqids();
$id = $sqids->encode([1, 2, 3]); // "86Rf07"
$numbers = $sqids->decode($id); // [1, 2, 3]
注意:由于算法的設(shè)計,多個ID可以解碼回相同的數(shù)字序列。如果ID是規(guī)范的對您的設(shè)計很重要,您必須手動重新編碼解碼的數(shù)字并檢查生成的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]

總結(jié)

Sqids作為一種開源庫,提供了生成短的唯一標識符的功能。它在鏈接縮短、日志事件標識、產(chǎn)品/對象ID生成以及文本消息和郵件確認代碼等方面具有廣泛的應(yīng)用。然而,需要注意的是,由于生成的ID可以解碼回數(shù)字,不適合用于敏感數(shù)據(jù)或用戶ID等敏感信息的存儲。Sqids的靈活性和獨特性使其成為各種應(yīng)用場景下的有用工具。


0 人點贊