當前位置: 妍妍網 > 碼農

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

2024-02-20碼農

什麽是 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