• Що таке Sqids?

    Sqids - це невелика бібліотека з відкритим вихідним кодом, яка може створювати короткі унікальні, випадково виглядаючі ID з чисел.

    Найкращий спосіб уявити це - як конвертер десяткових чисел у шістнадцяткові, але з деякими додатковими можливостями.

  • Скорочення посилань, генерація унікальних ідентифікаторів подій для журналювання, генерація ідентифікаторів для товарів/об'єктів на веб-сайті (як робить YouTube для відео), генерація коротких ідентифікаторів для текстових повідомлень, коди підтвердження в електронних листах і т.д.

  • Будь-які дані, які є чутливими. Згенеровані ідентифікатори не є хешами і можуть бути розкодовані назад у числа. Наприклад, вони можуть не бути хорошим вибором для ідентифікаторів користувачів, оскільки, один раз розкодовані, вони можуть розкрити кількість користувачів вашого додатку.

  • Чи можна закодувати кілька чисел одночасно?

    Так. Sqids може кодувати одне або багато не-від'ємних чисел у один ідентифікатор. Немає обмежень на кількість чисел, які можна закодувати, але є обмеження на те, яке число можна закодувати (залежно від мови реалізації).

    Це корисно з кількох причин: ви можете закодувати мітку часу UNIX і створити ідентифікатори з обмеженим терміном дії, або ви можете закодувати номер фрагмента бази даних разом з основним ключем і зекономити додаткові запити до бази даних.

  • Чи унікальні згенеровані ідентифікатори?

    Так, згенеровані ідентифікатори унікальні для вхідних даних та алфавіту.

    Але пам'ятайте, що стандартний алфавіт містить як загальні, так і великі літери, тому ідентифікатори за замовчуванням чутливі до регістру.

  • Які обмеження має Sqids?

    Sqids не може кодувати від'ємні числа.

    Мінімальна довжина алфавіту становить 3 символів.

    Алфавіт не може містити багатобайтові символи.

    Sqids не може генерувати ідентифікатори до певної довжини, лише принаймні певної довжини. Межа параметра мінімальної довжини знаходиться між 0 та 255.

    Sqids може спробувати відновити ідентифікатори до довжини алфавіту, мінус один.

  • Як можу зробити свої ідентифікатори унікальними?

    Бібліотека приймає власний алфавіт, з якого вона може генерувати ідентифікатори. Просто передкласти стандартний алфавіт, який надається.

    Запам'ятайте, що за достатньої спрямованості зусиль хтось може розібрати ваш переставлений алфавіт, тому це зовсім не техніка для приховання чутливих даних.

  • Як я можу перетасувати стандартний алфавіт?

    Стандартний алфавіт можна знайти тут .

    Ви можете використовувати будь-який із онлайн-інструментів для перемішування рядків або наш ігровий майданчик .

  • Чи краще використовувати коротший чи довший алфавіт?

    Залежить від вашого використання. Коротший алфавіт створить довші ідентифікатори, а довший алфавіт - коротші. Ви можете скористатися ігровим майданчиком , щоб перевірити, як будуть виглядати ваші ідентифікатори.

  • Чи може алфавіт складатися лише з чисел?

    Так. Зверніть увагу, що згенеровані ідентифікатори все ще є рядками, і вони можуть починатися з нуля.

  • Чи можна використовувати емодзі як алфавіт?

    Ні. Sqids не підтримує багатобайтові символи для алфавіту. Це також стосується емодзі та багатьох інших символів.

  • Чому доповнювати ідентифікатори?

    Бібліотека може розширювати ідентифікатори символами-сміттям, щоб зробити їх довшими. Це корисно, щоб не було очевидно, чи кодуєте ви невелике число, наприклад 1, чи велике число, наприклад 1000000.

    Декодування не буде пошкоджене.

  • Чи можу зробити згенеровані ідентифікатори довшими?

    Так, бібліотека приймає параметр мінімальної довжини, який гарантує, що ідентифікатори будуть принаймні такої довжини.

    Зверніть увагу, що немає гарантії на те, якої довжини будуть ваші ідентифікатори - лише те, що вони не будуть коротші за вказану вами довжину.

  • Чи можу зробити згенеровані ідентифікатори певної довжини?

    До певної міри.

    Встановлення максимальної довжини неможливе, оскільки рано чи пізно ваші ідентифікатори переповняться при великому вхідному значенні. Тому підтримується лише параметр мінімальної довжини, а точна або максимальна довжина не підтримується.

  • Чому використовувати чорний список?

    Чорний список може перешкоджати певним словам виявлятися в ваших ідентифікаторах. Це корисно, оскільки згенеровані ідентифікатори призначені для відображення в публічних місцях, наприклад, у URL.

    Sqids постачається з стандартним чорним списком , який містить найбільш загальну ненормативну лексику та нецензурні слова з кількох мов. Звичайно, ви можете розширити цей чорний список своїми словами.

  • Як працює чорний список?

    Співпадання слів у чорному списку не чутливе до регістру.

    Короткі слова менше 3 символів не будуть блоковані. Слова довжиною 3 символи повинні точно співпадати з ідентифікаторами. Слова довжиною 4 символи або більше спричинять співпадіння, якщо вони є підстрокою ідентифікатора.

    Якщо слова з чорного списку містять числа (leet-мову), вони спрацьовуватимуть лише, якщо вони знаходяться на початку або в кінці ідентифікатора.

  • Які слова є у стандартному чорному списку?

    Стандартний чорний список містить найбільш поширені нецензурні вислови та неприпустиму лексику з декількох мов. Повний список можна знайти тут .

  • Що відбувається, коли всі ідентифікатори заблоковані?

    Якщо згенерований ідентифікатор співпадає з словом у чорному списку, бібліотека спробує відновити його.

    Якщо кожна спроба відновлення ідентифікатора завершиться невдачею, функція кодування завершиться з помилкою. Обробка цієї помилки залежить від користувача.

    Найкращий спосіб зменшити кількість спроб відновлення - це мати довший алфавіт, не встановлювати мінімальну довжину та надавати менший чорний список. Надання порожнього чорного списку повністю вимикає цю функцію.

  • Як перевірити, чи ідентифікатори є валідними?

    Декодування ідентифікаторів зазвичай дасть якийсь числовий вихід, але це ще не означає, що ідентифікатор є канонічним. Щоб перевірити, що ідентифікатор є валідним, ви можете повторно закодувати розкодовані числа і перевірити, чи співпадає ідентифікатор.

    Причина, чому це не виконується автоматично, полягає в тому, що якщо стандартний список заблокованих слів зміниться у майбутньому, ми не хочемо автоматично недійсними робити створені раніше ідентифікатори, які тепер можуть відповідати новому списку слів.

  • Що відбувається, коли стандартний чорний список оновлюється?

    Ми обов'язково оновимо CHANGELOG, якщо стандартний список заблокованих слів зміниться.

    Вам потрібно врахувати сценарії, де до стандартного списку може бути додане нове слово. У цьому випадку повторне кодування чисел може видаляти різні ідентифікатори.

    Найкращий спосіб забезпечити послідовність вашіх ідентифікаторів протягом майбутніх оновлень - надати власний список заблокованих слів, навіть якщо він ідентичний поточному стандартному списку.

  • Чи кодування різних чисел може створити однакові ідентифікатори?

    Ні, кодування різних чисел створить унікальні ідентифікатори.

    Однак через конструкцію алгоритму декодування випадкових ідентифікаторів іноді може видавати ті самі числа. Найкращий спосіб перевірити канонічність ідентифікатора - просто повторно закодувати розкодовані числа і перевірити, чи співпадає ідентифікатор.

  • Що таке Hashids?

    Hashids був першою версією цієї бібліотеки, яка вийшла близько 2013 року. Він також створював короткі ідентифікатори, але використовував трохи інший метод.

  • Чому Hashids було оновлено до Sqids?

    Hashids обробляв кілька речей по-іншому.

    Він не підтримував власний список заблокованих слів, але замість цього використовував найпоширеніші англійські нецензурні слова. Також використовував параметр salt, щоб переставляти алфавіт, що робило його трохи заплутаним, оскільки бібліотека не має нічого спільного з шифруванням. Крім того, використовувалося занадто багато зарезервованих символів, що призводило до створення більш довгих ідентифікаторів.

    Отже, ми вирішили покращити і переозначити. Алгоритм спростився, було додано кілька функцій, і всі кодові репозиторії тепер під одним дахом за адресою one roof now .

  • Чому параметр salt був видалений?

    Параметр salt використовувався для перемішування алфавіту, і він ніколи не мав бути пов'язаний з безпекою. Як Hashids, так і Sqids працюють подібно до перетворення десяткових чисел у шістнадцяткові, але з деякими корекціями. Тут немає жодного шифрування, тому для уникнення плутанини цей параметр було повністю вилучено.

  • Чи сумісний Hashids з Sqids?

    Ні, Sqids розширює можливості Hashids і має різні цілі та вимоги до дизайну; тому створені ідентифікатори несумісні з Hashids.

  • Як безпечно оновити з Hashids до Sqids?

    Оскільки між Hashids та Sqids немає сумісності, просто замінити Hashids на Sqids неможливо.

    Однак ви можете об'єднати обидва, відрізняючи, який ідентифікатор належить якій бібліотеці.

    Один із способів це зробити - це довжина ІД. Якщо ви переходите на Sqids, ви можете встановити більшу мінімальну довжину. Ще один спосіб - вручну додати/передати власний символ до новостворених ІД.

    Нарешті, ви також можете спробувати розкодувати ІД за допомогою Hashids, щоб перевірити його на валідність. Якщо ні - розкодуйте та перекодуйте за допомогою Sqids, щоб перевірити, чи працює це.

  • Де я можу знайти оригінальні бібліотеки Hashids?

    Кожна мовна реалізація на цьому веб-сайті містить посилання на оригінальний репозиторій Hashids, якщо він існує.

  • Як я можу внести свій внесок?

    Якщо ви хочете підтримати проект, ми б вдячні за додавання зірочки до наших репозиторіїв на Github для більшої видимості.

    Якщо ви розробник і не бачите реалізації Sqids для певної мови програмування, будь ласка, допоможіть нам перетворити бібліотеку. Те ж саме стосується мови програмування, яка не вказана.

    Якщо ви помітили помилку в специфікації або в будь-якій з реалізацій, будь ласка, створіть проблему або запит на злиття з пропозицією виправлення в відповідному репозиторії.

    Якщо ви володієте декількома мовами, нам буде корисна ваша допомога з доналаштуванням списку заблокованих слів та виправленням перекладів веб-сайту , якщо ви помітили будь-які проблеми.

    Нарешті, якщо у вас є деякий досвід з Hashids/Sqids, будь ласка, допоможіть керувати нашою спільнотою, відповідаючи на будь-які питання, які можуть виникнути.

  • Як перенести Sqids на іншу мову програмування?

    Якщо ви хочете портувати Sqids на одну з наступних мов програмування (або нову, яка не вказана тут):

    ActionScript , D , Elm , Haxe , Io , PostgreSQL , Raku , Smalltalk , T-SQL , Tcl , VBA

    Форкніть офіційний репозиторій у свій власний обліковий запис Github та реалізуйте специфікацію разом із усіма тестами. Ви можете перевикористовувати будь-які існуючі README (приклад ).

    Коли бібліотека буде готова, створіть запит на злиття. Після злиття ми оновимо веб-сайт.

    Якщо у репозиторія немає активних утримувачів, ми будемо раді запросити вас керувати репозиторієм і стати офіційним утримувачем.