Генерация случайной строки / символов в JavaScript - PullRequest
1470 голосов
/ 29 августа 2009

Мне нужна строка из 5 символов, состоящая из символов, выбранных случайным образом из набора [a-zA-Z0-9].

Какой лучший способ сделать это с помощью JavaScript?

Ответы [ 65 ]

2 голосов
/ 22 сентября 2013

Это то, что я использовал. Сочетание пары здесь. Я использую его в цикле, и каждый его идентификатор уникален Может быть не 5 символов, но гарантированно уникален.

var newId =
    "randomid_" +
    (Math.random() / +new Date()).toString(36).replace(/[^a-z]+/g, '');
2 голосов
/ 29 января 2019

Как об этом ниже ... это даст действительно случайные значения:

function getRandomStrings(length) {
  const value = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  const randoms = [];
  for(let i=0; i < length; i++) {
     randoms.push(value[Math.floor(Math.random()*value.length)]);
  }
  return randoms.join('');
}

Но если вы ищете более короткий синтаксис в ES6 :

const getRandomStrings = length => Math.random().toString(36).substr(-length);
2 голосов
/ 15 апреля 2014

Если возможна библиотека, Chance.js может помочь: http://chancejs.com/#string

2 голосов
/ 17 марта 2013

Расширение на изящном примере Doubletap, отвечая на вопросы, поднятые Гертами и Драконом. Просто добавьте цикл while для проверки этих редких нулевых обстоятельств и ограничьте число символов пятью.

function rndStr() {
    x=Math.random().toString(36).substring(7).substr(0,5);
    while (x.length!=5){
        x=Math.random().toString(36).substring(7).substr(0,5);
    }
    return x;
}

Вот jsfiddle, предупреждающий вас о результате: http://jsfiddle.net/pLJJ7/

2 голосов
/ 02 октября 2017

В этом сочетаются многие ответы.

var randNo = Math.floor(Math.random() * 100) + 2 + "" + new Date().getTime() +  Math.floor(Math.random() * 100) + 2 + (Math.random().toString(36).replace(/[^a-zA-Z]+/g, '').substr(0, 5));

console.log(randNo);

Я использую его в течение 1 месяца с отличными результатами.

1 голос
/ 21 сентября 2013
",,,,,".replace(/,/g,function (){return "AzByC0xDwEv9FuGt8HsIrJ7qKpLo6MnNmO5lPkQj4RiShT3gUfVe2WdXcY1bZa".charAt(Math.floor(Math.random()*62))});
1 голос
/ 30 июня 2014

Хранит 5 буквенно-цифровых символов в переменной c.

for(var c = ''; c.length < 5;) c += Math.random().toString(36).substr(2, 1)
1 голос
/ 02 апреля 2013

Также основанный на ответе даблтапа, он обрабатывает любую длину случайных обязательных символов (только ниже) и продолжает генерировать случайные числа, пока не будет собрано достаточное количество символов.

function randomChars(len) {
    var chars = '';

    while (chars.length < len) {
        chars += Math.random().toString(36).substring(2);
    }

    // Remove unnecessary additional characters.
    return chars.substring(0, len);
}
1 голос
/ 06 ноября 2014

Мне понравилась краткость ответа Math.random (). ToString (36) .substring (7) от doubletap, но не то, чтобы в нем было так много коллизий, как правильно указывал hacklikecrack. Он генерировал 11-значные строки, но частота дублирования составляла 11% при размере выборки 1 миллион.

Вот более длинная (но все еще короткая) и более медленная альтернатива, в которой было всего 133 дубликата на выборке в 1 миллион. В редких случаях строка все равно будет короче 11 символов:

Math.abs(Math.random().toString().split('')
    .reduce(function(p,c){return (p<<5)-p+c})).toString(36).substr(0,11);
1 голос
/ 20 марта 2013
"12345".split('').map(function(){return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.charAt(Math.floor(62*Math.random()));}).join('');

//or

String.prototype.rand = function() {return this.split('').map(function(){return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.charAt(Math.floor(62*Math.random()));}).join('');};

сгенерирует случайную буквенно-цифровую строку с длиной первой / вызывающей строки

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