Гарантирует ли Nano ID уникальность как UUID?

Рассматриваю переход с UUID версии 4 на Nano ID. Первый естественный вопрос, который тут возникает - гарантирует ли Nano ID такую же уникальность, как UUID?

Если я правильно понял, генерация двух одинаковых UUID-ов невозможна ни при каких условиях. Свойственно ли то же самое для Nano ID?


Ответы (2 шт):

Автор решения: eri

Также как и UUID4 оно не гарантирует отсутствие коллизий. Но шанс выпадения её не велик при использовании NanoID длиньше 10 символов. Калькулятор для оценки коллизий есть на странице https://zelark.github.io/nano-id-cc/

→ Ссылка
Автор решения: Serge3leo

Если я правильно понял, NanoID не имеет спецификации в явном виде, но есть только одна конкретная реализация NanoID. Поскольку в ней используется, сrypto.getRandomValues() для массива длины 21 байт, после чего используется 6 бит из каждого байта, всего 126 бит, матожидание числа NanoID до первого повтора: ≈1.2e+19 (см, Кнут, т. 3, Сортировка и поиск, ЕМНИП)

По спецификациям UUID v4, для его создания может использоваться, как "криптографически стойкий" ДСЧ, например, crypto.randomUUID(), так и не криптографически стойкий ПДСЧ.

В случае crypto.randomUUID(), используются 122 из 128 "криптографически стойких" случайных бит. В этом случае матожидание числа UUID v4 до первого повтора: ≈2.9e+18 (т.е. есть шанс на незначительное улучшение).

Однако, в случае не криптографически стойких ПДСЧ для создания UUID v4, можно ожидать циклы в получаемых последовательностях UUID v4. Возможно, что длины циклов будут гораздо, гораздо больше, вплоть до ≈5.3e+36 (2122, т.е. есть шанс на существенное ухудшение).

Но это не гарантируется, ни спецификациями, ни документацией конкретных реализаций, и требует анализа конкретной реализации.

Если же требуются гарантии уникальности, следует использовать, либо иные версии UUID, либо предпринимать какие либо дополнительные меры.

Итого, при переходе с UUID v4 на NanoID, при имеющейся информации, гарантий нет, может стать, как немного лучше, так и, если не повезёт, сильно хуже.

→ Ссылка