Подтвердить что ты не робот

Кросс-браузерная случайная строка (Math.random() * 1e32).toString(36)

Я использую (Math.random()*1e32).toString(36) как простой генератор случайных строк. Это очень просто и хорошо работает и заполняет мои потребности (временное случайное использование для идентификаторов и т.д.).

В хроме, сафари, firefox и т.е. Math.random()*1e32 генерируются числа вроде: 8.357963780872523e+31:-)

  • В chrome, safari и firefox такое число преобразуется в строку (8.357963780872523e+31).toString(36)221fr2y11ebk4cog84wok, которая именно я хочу.
  • Однако в ie11 результат строки 6.936gwtrpf69(e+20).

Как я могу получить одну и ту же строку 221fr2y11ebk4cog84wok от 8.357963780872523e+31 в кросс-браузере?

BTW: Я получил идею этой случайной строки из этого потока: Случайная буквенно-цифровая строка в JavaScript?

4b9b3361

Ответ 1

Помня о том, что Math.random() возвращает значение от 0 до 1 (исключение), а числа в JavaScript имеют 53 бит мантиссы в соответствии с IEEE-754, безопасный способ получить случайное целое число будет

Math.random() * Math.pow(2, 54)

Таким образом, случайную буквенно-цифровую строку можно было бы получить из

(Math.random() * Math.pow(2, 54)).toString(36)

Обратите внимание, что нет никаких гарантий относительно количества символов, которое может быть между 1 и 11 в зависимости от порядка величины случайного значения.

Ответ 2

Как я вижу, вам не нужно умножать случайное число на такое большое число. Попробуйте следующее:

Math.random().toString(36).slice(2)

Этого хватает? Это немного более короткая строка, но она согласована во всех браузерах (которые я тестировал).