Как генерировать уникальные идентификаторы только числа с фиксированной длиной (до 10 символов) в рельсах - PullRequest
0 голосов
/ 08 января 2020

Я хочу применить уникальные идентификаторы, неочевидные, но с надеждой, что они будут содержать не более 10 символов (фиксированной длины) и только цифры.

Сейчас используется SecureRandom.random_number (10 ** 9), но я сомневаюсь в будущем, если Возникают проблемы с дублированием, также когда-то реализованные DateTime.now.strftime('% Q') в надежде найти уникальный идентификатор в миллисекунду, но он выдал 13 символов.

Пока я просто отправляю вопрос. Если вы знаете, как это сделать, я буду признателен за это

1 Ответ

1 голос
/ 09 января 2020

Если вам нужны трудно угадываемые 10-ди git идентификаторы, то SecureRandom трудно победить.

Но учтите, что для генерации 10- ди git ID, лучше следующее: SecureRandom.random_number(10 ** 10). Обратите внимание, что при этом вероятность создания дублирующего числа становится вероятной после генерации около 100 000 из них (более точные формулировки и формулы см. В « День рождения »).

Если вы можете Примите небольшой набор букв (от a до f), в дополнение к цифрам, вам может помочь следующее: SecureRandom.hex(5). Здесь вероятность дубликатов меньше, и вероятность становится вероятной после генерации около миллиона из них.

Помните, однако, что, как правило, случайные числа создают риск дубликатов, поэтому вам нужен способ проверить случайные идентификаторы уникальности.

Альтернативой является шифрование последовательного счетчика секретным ключом (например, с помощью шифрования с сохранением формата). Хотя этот подход сохраняет уникальность, возникает необходимость защитить секретный ключ от атак.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...