Недавно я делал что-то подобное, чтобы сгенерировать 8-байтовую случайную строку из 62 символов. Символы были 0-9, a-z, A-Z. У меня был их массив, так как я делал 8 циклов и выбирал случайное значение из массива. Это было внутри приложения rails.
str = ''
8.times {|i| str << ARRAY_OF_POSSIBLE_VALUES[rand(SIZE_OF_ARRAY_OF_POSSIBLE_VALUES)] }
Странная вещь в том, что я получил много дубликатов. Теперь случайно это почти никогда не должно происходить. 62 ^ 8 огромен, но из 1200 или около того кодов в БД у меня было много дубликатов. Я заметил, что они происходят на часовых границах друг друга. Другими словами, в 12:12:23 и 2:12:22 я мог бы увидеть дуплекс или что-то в этом роде ... не уверен, является ли время проблемой или нет.
Этот код был до создания объекта activerecord. Перед созданием записи этот код запускается и генерирует «уникальный» код. Записи в БД всегда создавались надежно, но код (стр. В строке выше) дублировался слишком часто.
Я создал сценарий для выполнения 100000 итераций этой строки с небольшой задержкой, поэтому потребуется 3-4 часа в надежде увидеть какой-то шаблон повторения на почасовой основе, но ничего не увидел. Я понятия не имею, почему это происходило в моем приложении rails.