Как сгенерировать случайную букво-численную строку в JavaScript?

Вариант №1


function randomString(length) {
    return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1);
}

Вариант №2


function randomString(length, chars) {
var mask = '';
if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz';
if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (chars.indexOf('#') > -1) mask += '0123456789';
if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\';
var result = '';
for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)];
return result;
}

console.log(randomString(16, 'aA'));
console.log(randomString(32, '#aA'));
console.log(randomString(64, '#A!'));

Вариант №3


function randomString() {
    return Math.random().toString(36).slice(2)
}

Не работает, если Math.random()вернет 0.5


(0.5).toString(36).substr(2,16) returns "i"

Решение


function randomString() {
    var s=Math.random().toString(36).slice(2); return s.length===16 ? s : rStr();
}

Вариант №4

Еще один вариант элегантного получения случайной строки


function randomString() {
    return (Math.random()*1e32).toString(36)
}

  1. JavaScript