App下載

Sqids:生成簡(jiǎn)短唯一ID開(kāi)源庫(kù)

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

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

什么是 Sqids?

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

sqids

它有什么用處?

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

它不適用于什么?

任何不敏感的數(shù)據(jù)。生成的ID不是哈希值,可以解碼回?cái)?shù)字。例如,它們可能不是用戶ID的好選擇,因?yàn)橐坏┙獯a,它們可能會(huì)透露您應(yīng)用的用戶數(shù)量。

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

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

生成的ID是唯一的嗎?

是的,生成的ID對(duì)于輸入和字母表是唯一的。請(qǐng)記住,默認(rèn)字母表包含大寫(xiě)和小寫(xiě)字母,因此默認(rèn)ID是區(qū)分大小寫(xiě)的。

Sqids 有什么限制?

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

Sqids應(yīng)用

安裝

composer require sqids/sqids

示例代碼

1.簡(jiǎn)單的解碼和編碼

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

2. 強(qiáng)制ID的最小長(zhǎng)度

$sqids = new Sqids(minLength: 10);
$id = $sqids->encode([1, 2, 3]); // "86Rf07xd4z"
$numbers = $sqids->decode($id); // [1, 2, 3]

3. 通過(guò)提供自定義字母表隨機(jī)化ID

$sqids = new Sqids(alphabet: 'FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE');
$id = $sqids->encode([1, 2, 3]); // "B4aajs"
$numbers = $sqids->decode($id); // [1, 2, 3]

4. 防止特定單詞出現(xiàn)在自動(dòng)生成的ID中的任何位置

$sqids = new Sqids(blocklist: ['86Rf07']);
$id = $sqids->encode([1, 2, 3]); // "se8ojk"
$numbers = $sqids->decode($id); // [1, 2, 3]

總結(jié)

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


0 人點(diǎn)贊