Кросс-браузерная случайная строка (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?
Ответы
Ответ 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)
Этого хватает? Это немного более короткая строка, но она согласована во всех браузерах (которые я тестировал).