Что такое Sqids?

Sqids - это библиотека с открытым исходным кодом, которая позволяет генерировать короткие уникальные идентификаторы из чисел. Эти идентификаторы безопасны для URL, могут кодировать несколько чисел и не содержат обычные слова из списка непристойной лексики. Подробнее .

Вот как они выглядят:

https://example.com/Lqj8a0

Быстрый пример кодирования и декодирования:

val sqids = Sqids.default
val id = sqids.encodeUnsafeString(1, 2, 3) // "86Rf07"
val numbers = sqids.decode(id) // List(1, 2, 3)

Если идентификаторы слишком короткие, вы можете дополнить их до определенной длины:

Sqids
  .withMinLength(10)
  .foreach { sqids =>
    val id = sqids.encodeUnsafeString(1, 2, 3) // "86Rf07xd4z"
    val numbers = sqids.decode(id) // List(1, 2, 3)
  }

Создание уникальных идентификаторов путем перемешивания алфавита:

Alphabet("k3G7QAe51FCsPW92uEOyq4Bg6Sp8YzVTmnU0liwDdHXLajZrfxNhobJIRcMvKt")
  .flatMap(Sqids.forAlphabet)
  .foreach { sqids =>
    val id = sqids.encodeUnsafeString(1, 2, 3) // "XRKUdQ"
    val numbers = sqids.decode(id) // List(1, 2, 3)
  }

Полная документация находится на https://github.com/sqids/sqids-scala

Если вы ищете оригинальный Hashids Scala, вы можете найти его здесь: https://github.com/newhoggy/hashids-scala

Варианты использования

Основное применение Sqids - это чисто визуальное. Если вы хотите использовать идентификаторы вместо чисел в своем проекте, Sqids может быть хорошим выбором.

Подходит для

  • Кодирование первичных ключей Если вы используете реляционную базу данных
  • Экономия запросов к базе данных Путем кодирования нескольких объектов
  • Временные токены входа Без непристойной лексики и безопасные для URL

Не подходит для

  • Чувствительные данные Это не библиотека шифрования
  • Идентификаторы пользователей Могут раскрывать количество пользователей, если кто-то узнает алфавит кодирования

Особенности

  • 🆔 Генерация коротких идентификаторов из неотрицательных чисел
  • Простое кодирование и декодирование
  • 🫣 Автоматически сгенерированные идентификаторы не содержат общей непристойной лексики
  • 🎲 Поддержка пользовательских идентификаторов через перемешанный алфавит
  • 🥳 45 интеграций (84% используют новый дизайн)
  • 📌 Каждая версия производит одинаковые идентификаторы
  • 🍻 Небольшая библиотека с разрешительной лицензией

Пример / Площадка