Gerar caracteres / caracteres aleatórios em JavaScript

quero um texto de 5 caracteres composto por caracteres escolhidos aleatoriamente do conjunto {[[0]}.

Qual é a melhor maneira de fazer isto com o JavaScript?

Author: T.Todua, 2009-08-29

30 answers

Acho que isto vai funcionar para ti.

function makeid() {
  var text = "";
  var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

  for (var i = 0; i < 5; i++)
    text += possible.charAt(Math.floor(Math.random() * possible.length));

  return text;
}

console.log(makeid());
 1704
Author: csharptest.net, 2017-06-29 10:24:37

let r = Math.random().toString(36).substring(7);
console.log("random", r);
 1796
Author: doubletap, 2018-08-25 17:24:17

Math.random é mau para este tipo de coisas.

Opção 1

Se for capaz de fazer isto servidor - lado, basta usar o crypto Módulo

var crypto = require("crypto");
var id = crypto.randomBytes(20).toString('hex');

// "bb5dc8842ca31d4603d6aa11448d1654"

A sequência resultante terá o dobro do tempo que os bytes aleatórios que gerar; cada byte codificado para hex tem 2 caracteres. 20 bytes serão 40 caracteres de hex.


Opção 2

Se você tem que fazer isso cliente -lado, talvez tente o uuid módulo

var uuid = require("uuid");
var id = uuid.v4();

// "110ec58a-a0f2-4ac4-8393-c866d813b8d1"

Opção 3

Se você tem que fazer isso cliente - lado e você não tem que suportar navegadores antigos, você pode fazê-lo sem dependências

// dec2hex :: Integer -> String
function dec2hex (dec) {
  return ('0' + dec.toString(16)).substr(-2)
}

// generateId :: Integer -> String
function generateId (len) {
  var arr = new Uint8Array((len || 40) / 2)
  window.crypto.getRandomValues(arr)
  return Array.from(arr, dec2hex).join('')
}

console.log(generateId())
// "82defcf324571e70b0521d79cce2bf3fffccd69"

console.log(generateId(20))
// "c1a050a4cd1556948d41"
 260
Author: user633183, 2017-05-23 12:34:53
Eis uma melhoria em relação à excelente resposta do doubletap. O original tem duas desvantagens que são abordadas aqui:

Primeiro, como outros já mencionaram, tem uma pequena probabilidade de produzir cadeias curtas ou mesmo uma cadeia vazia (se o número aleatório for 0), o que pode quebrar a sua aplicação. Aqui está uma solução:

(Math.random().toString(36)+'00000000000000000').slice(2, N+2)

Em segundo lugar, tanto o original como a solução acima limitam o tamanho do texto N A 16 caracteres. O seguinte irá devolver uma sequência de tamanho N Para qualquer N (mas note que o uso de n > 16 não irá aumentar a aleatoriedade ou diminuir a probabilidade de colisões):

Array(N+1).join((Math.random().toString(36)+'00000000000000000').slice(2, 18)).slice(0, N)

Explicação:

  1. escolha um número aleatório na gama [0,1], ou seja, entre 0 (inclusive) e 1 (exclusivo).
  2. converter o número para uma cadeia de base-36, ou seja, usando caracteres 0-9 e a-Z.
  3. Pad com zeros (resolve a primeira edição). Corta a parte principal. prefixo e zeros de enchimento extra.
  4. repete o texto o suficiente vezes para ter pelo menos n caracteres nela (juntando strings vazias com a string aleatória mais Curta usada como delimitador).
  5. cortar exactamente n caracteres do texto.

Mais pensamentos:

  • esta solução não usa letras maiúsculas, mas em quase todos os casos (sem trocadilhos) não importa.
  • o comprimento máximo da cadeia A N = 16 na resposta original é medido em cromado. No Firefox é N = 11. Mas, como explicado, a segunda solução é sobre suportar qualquer comprimento de cadeia solicitado, não sobre adicionar aleatoriedade, por isso não faz muita diferença.
  • todas as cadeias devolvidas têm uma probabilidade igual de serem devolvidas, pelo menos até os resultados devolvidos pela matemática.random() are uniformely distributed (this is not cryptographic-strength randomness, in any case).
  • nem todas as cadeias possíveis de tamanho N podem ser devolvidas. Na segunda solução isso é óbvio (uma vez que a cadeia menor está simplesmente sendo duplicada), mas também na resposta original isso é verdade uma vez que na conversão para base-36 os últimos bits podem não ser parte dos bits aleatórios originais. Especificamente, se você olhar para o resultado da Matemática.aleatorio().toString (36), você vai notar que o último personagem não está uniformemente distribuído. Mais uma vez, em quase todos os casos não importa, mas nós cortamos a corda final do início ao invés do fim da cadeia aleatória de modo que as cordas curtas (por exemplo, N=1) não são afectado.

Actualizar:

Aqui estão alguns outros tipos funcionais que inventei. Eles diferem da solução acima na medida em que:
  • eles usam um alfabeto arbitrário explícito (mais genérico, e adequado para a pergunta original que pedia letras maiúsculas e minúsculas).
  • todas as cadeias de comprimento N têm uma probabilidade igual de serem devolvidas (ou seja, as cadeias não contêm repetições).
  • Eles são baseados num mapa. function, rather than the toString (36) trick, which makes them more straightforce and easy to understand.
Então, diz que o teu alfabeto de eleição é
var s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

Então estes dois são equivalentes um ao outro, então você pode escolher o que for mais intuitivo para você:

Array(N).join().split(',').map(function() { return s.charAt(Math.floor(Math.random() * s.length)); }).join('');

E

Array.apply(null, Array(N)).map(function() { return s.charAt(Math.floor(Math.random() * s.length)); }).join('');

Editar:

Parece que qubytee Martijn de Milliano surgiu com soluções semelhantes a este último (Parabéns!), que eu de alguma forma perdi. Desde eles não parecem tão curtos de relance, eu vou deixá-lo aqui de qualquer maneira, no caso de alguém realmente quer um liner: -)

Também substituiu "new Array" por "Array" em todas as soluções para cortar mais alguns bytes.

 134
Author: amichair, 2017-05-23 12:02:58

Curto, fácil e fiável

Devolve exactamente 5 caracteres aleatórios, em oposição a algumas das respostas topadas encontradas aqui.

Math.random().toString(36).substr(2, 5);
 132
Author: Silver Ringvee, 2017-12-12 10:23:05
Algo assim deve funcionar.
function randomString(len, charSet) {
    charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    var randomString = '';
    for (var i = 0; i < len; i++) {
        var randomPoz = Math.floor(Math.random() * charSet.length);
        randomString += charSet.substring(randomPoz,randomPoz+1);
    }
    return randomString;
}

Chamada com codificação predefinida [a-zA-Z0-9] ou enviar a sua própria:

var randomValue = randomString(5);

var randomValue = randomString(5, 'PICKCHARSFROMTHISSET');
 83
Author: CaffGeek, 2009-08-28 21:28:20

function randomstring(L) {
  var s = '';
  var randomchar = function() {
    var n = Math.floor(Math.random() * 62);
    if (n < 10) return n; //1-10
    if (n < 36) return String.fromCharCode(n + 55); //A-Z
    return String.fromCharCode(n + 61); //a-z
  }
  while (s.length < L) s += randomchar();
  return s;
}
console.log(randomstring(5));
 61
Author: kennebec, 2017-06-29 10:17:53

A solução mais compacta, porque slice é menor que substring. Subtrair do fim do texto permite evitar o símbolo de ponto flutuante gerado por random Função:

Math.random().toString(36).slice(-5);

Ou mesmo

(+new Date).toString(36).slice(-5);

// Using Math.random
console.log(Math.random().toString(36).slice(-5));

// Using new Date
console.log((+new Date).toString(36).slice(-5));
 52
Author: Valentin, 2018-01-21 01:52:18

String like var str = ""; to concatenate random characters

  • dentro de um ciclo crie um número de índice rand de 0 a 61 (0..9+A..Z+A..z = 62)
  • criar uma lógica condicional a ajustar/corrigir rand (já que é 0..61) incrementando-o por algum Número (ver exemplos abaixo) para obter de volta o número CharCode certo e o caráter relacionado.
  • dentro do circuito concentrado para stra String.fromCharCode( incremented rand )
  • Vamos imaginar o carácter quadro e respectivas gamas :
    _____0....9______A..........Z______a..........z___________  Character
         | 10 |      |    26    |      |    26    |             Tot = 62 characters
        48....57    65..........90    97..........122           CharCode ranges
    

    Math.floor( Math.random * 62 ) dá uma gama de 0..61 (o que precisamos). Como corrigir (incremento) o Aleatório {[[24]} para obter os intervalos de código correctos ?

          |   rand   | charCode |  (0..61)rand += fix            = charCode ranges |
    ------+----------+----------+--------------------------------+-----------------+
    0..9  |   0..9   |  48..57  |  rand += 48                    =     48..57      |
    A..Z  |  10..35  |  65..90  |  rand += 55 /*  90-35 = 55 */  =     65..90      |
    a..z  |  36..61  |  97..122 |  rand += 61 /* 122-61 = 61 */  =     97..122     |
    

    A lógica da operação condicional do quadro acima:

       rand += rand>9 ? ( rand<36 ? 55 : 61 ) : 48 ;
    // rand +=  true  ? (  true   ? 55 else 61 ) else 48 ;
    

    Se seguiu a explicação acima deve ser capaz de criar este excerto alfanumérico:

    jsBin demonstração

    function randomString( len ) {
      var str = "";                                         // String result
      for(var i=0; i<len; i++){                             // Loop `len` times
        var rand = Math.floor( Math.random() * 62 );        // random: 0..61
        var charCode = rand+= rand>9? (rand<36?55:61) : 48; // Get correct charCode
        str += String.fromCharCode( charCode );             // add Character to str
      }
      return str;       // After all loops are done, return the concatenated string
    }
    
    console.log( randomString(10) ); // "7GL9F0ne6t"
    

    ou se quiser:

    function randomString( n ) {
      var r="";
      while(n--)r+=String.fromCharCode((r=Math.random()*62|0,r+=r>9?(r<36?55:61):48));
      return r;
    }
    
     41
    Author: Roko C. Buljan, 2016-01-07 17:49:38

    A maneira mais simples é:

    (new Date%9e6).toString(36)
    

    Isto gera cadeias aleatórias de 5 caracteres com base na hora actual. Exemplo de saída é 4mtxj ou 4mv90 ou 4mwp1

    O problema com isso é que se você chamá-lo duas vezes no mesmo segundo, ele irá gerar a mesma string.

    A maneira mais segura é:

    (0|Math.random()*9e6).toString(36)
    

    Isto irá gerar uma cadeia aleatória de 4 ou 5 caracteres, sempre diferente. Exemplo de saída é como 30jzm ou 1r591 ou 4su1a

    Em ambos os sentidos o a primeira parte gera um número aleatório. A parte .toString(36) moldou o número para uma representação base36 (alfadecimal) dela.

     28
    Author: MasqueradeCircus, 2015-03-11 22:19:43

    Uma versão mais recente com es6 operador de spread:

    [...Array(30)].map(() => Math.random().toString(36)[3]).join('')

    • o {[1] } é um número arbitrário, você pode escolher qualquer comprimento token que quiser
    • o 36 é o número máximo de radix que pode passar para numérico.toString () , o que significa todos os números e letras minúsculas A-z
    • o 3 é usado para escolher o terceiro número da cadeia aleatória que se parece com isto: "0.mfbiohx64i", podemos tirar qualquer índice depois 0.
     26
    Author: Or Duan, 2018-02-18 01:04:10
    Aqui estão alguns recortes fáceis. Mudar new Array(5) para definir o comprimento.

    Incluindo 0-9a-z

    new Array(5).join().replace(/(.|$)/g, function(){return ((Math.random()*36)|0).toString(36);})
    

    Incluindo 0-9a-zA-Z

    new Array(5).join().replace(/(.|$)/g, function(){return ((Math.random()*36)|0).toString(36)[Math.random()<.5?"toString":"toUpperCase"]();});
    
     18
    Author: bendytree, 2015-10-26 14:57:31

    Se está a usar Lodash ou Underscore , então é tão simples:

    var randomVal = _.sample('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 5).join('');
    
     14
    Author: vineet, 2016-04-20 05:39:18

    Eu sei que todos já acertaram, mas eu senti como se tivesse uma tentativa nesta da maneira mais leve possível (luz em código, não CPU):

    function rand(length, current) {
      current = current ? current : '';
      return length ? rand(--length, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".charAt(Math.floor(Math.random() * 60)) + current) : current;
    }
    
    console.log(rand(5));

    É preciso um pouco de tempo para pensar, mas acho que realmente mostra como a sintaxe do javascript é incrível.

     14
    Author: Roderick, 2017-06-29 11:08:40

    Assumindo que usa sublinhado é possível gerar elegantemente cadeia aleatória em apenas duas linhas:

    var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    var random = _.sample(possible, 5).join('');
    
     11
    Author: tiktak, 2015-05-18 11:48:25
    Eis o método que criei.
    Ele irá criar um texto que contém tanto caracteres maiúsculos como minúsculos.
    Além disso, incluí a função que irá criar uma cadeia alfanumérica também.

    Exemplos de Trabalho:
    http://jsfiddle.net/greatbigmassive/vhsxs/ (alpha só)
    http://jsfiddle.net/greatbigmassive/PJwg8/ (alfanuméricos)

    function randString(x){
        var s = "";
        while(s.length<x&&x>0){
            var r = Math.random();
            s+= String.fromCharCode(Math.floor(r*26) + (r>0.5?97:65));
        }
        return s;
    }
    

    Actualizar Julho 2015
    Isto faz a mesma coisa, mas faz mais sentido e inclui todas as letras.

    var s = "";
    while(s.length<x&&x>0){
        v = Math.random()<0.5?32:0;
        s += String.fromCharCode(Math.round(Math.random()*((122-v)-(97-v))+(97-v)));
    }
    
     11
    Author: Adam, 2015-07-27 11:54:09

    No caso de alguém interessado em um one-liner (embora não formatado como tal para sua conveniência), que aloca a memória de uma só vez (mas note-se que, para pequenas cadeias realmente não importa) aqui está como fazê-lo:

    Array.apply(0, Array(5)).map(function() {
        return (function(charset){
            return charset.charAt(Math.floor(Math.random() * charset.length))
        }('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'));
    }).join('')
    

    Você pode substituir 5 pelo comprimento do texto que deseja. Graças a @AriyaHidayat em este post para a solução para a função map não trabalhando na matriz esparsa criada por Array(5).

     10
    Author: Martijn de Milliano, 2017-05-23 12:02:58

    Para cumprir o requisito [a-zA-Z0-9] e comprimento = 5 utilizar

    btoa(Math.random()).substr(5, 5);
    

    Letras minúsculas, letras maiúsculas e números irão ocorrer.

     8
    Author: Sergio Cabral, 2018-06-18 01:50:21
    Algoritmo rápido e melhorado. Não garante uniformidade (Ver observações).
    function getRandomId(length) {
        if (!length) {
            return '';
        }
    
        const possible =
            'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        let result = '';
        let array;
    
        if ('Uint8Array' in self && 'crypto' in self && length <= 65536) {
            array = new Uint8Array(length);
            self.crypto.getRandomValues(array);
        } else {
            array = new Array(length);
    
            for (let i = 0; i < length; i++) {
                array[i] = Math.floor(Math.random() * 62);
            }
        }
    
        for (let i = 0; i < length; i++) {
            result += possible.charAt(array[i] % 62);
        }
    
        return result;
    }
    
     7
    Author: yaroslav, 2017-05-21 10:33:45
    function randomString (strLength, charSet) {
        var result = [];
    
        strLength = strLength || 5;
        charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    
        while (--strLength) {
            result.push(charSet.charAt(Math.floor(Math.random() * charSet.length)));
        }
    
        return result.join('');
    }
    
    Isto é o mais limpo possível. É rápido também, http://jsperf.com/ay-random-string.
     5
    Author: Gajus, 2013-01-10 02:07:23

    Pode fazer um ciclo através de um conjunto de itens e adicioná-los recursivamente a uma variável de cadeia de caracteres, por exemplo, se quiser uma sequência aleatória de ADN:

    function randomDNA(len) {
      len = len || 100
      var nuc = new Array("A", "T", "C", "G")
      var i = 0
      var n = 0
      s = ''
      while (i <= len - 1) {
        n = Math.floor(Math.random() * 4)
        s += nuc[n]
        i++
      }
      return s
    }
    
    console.log(randomDNA(5));
     5
    Author: Andy, 2017-06-29 10:31:37

    Não encontrei uma solução limpa para suportar caracteres minúsculos e maiúsculos.

    Suporte apenas para minúsculas:

    Math.random().toString(36).substr(2, 5)

    Partindo dessa solução para suportar minúsculas e maiúsculas:

    Math.random().toString(36).substr(2, 5).split('').map(c => Math.random() < 0.5 ? c.toUpperCase() : c).join('');

    Muda o 5 em substr(2, 5) para ajustar ao comprimento que precisas.

     5
    Author: ravishi, 2018-02-05 21:17:16
    Que tal algo assim? Não é muito aleatório, mas curto e único de cada vez que lhe chamas.
     4
    Author: Swergas, 2017-11-16 14:21:11

    Isto funciona com certeza

    <script language="javascript" type="text/javascript">
    function randomString() {
     var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
     var string_length = 8;
     var randomstring = '';
     for (var i=0; i<string_length; i++) {
      var rnum = Math.floor(Math.random() * chars.length);
      randomstring += chars.substring(rnum,rnum+1);
     }
     document.randform.randomfield.value = randomstring;
    }
    </script>
    
     3
    Author: Vignesh, 2009-12-03 08:48:06

    Gerar 10 caracteres de cadeia longa. O comprimento é definido pelo parâmetro (padrão 10).

    function random_string_generator(len) {
    var len = len || 10;
    var str = '';
    var i = 0;
    
    for(i=0; i<len; i++) {
        switch(Math.floor(Math.random()*3+1)) {
            case 1: // digit
                str += (Math.floor(Math.random()*9)).toString();
            break;
    
            case 2: // small letter
                str += String.fromCharCode(Math.floor(Math.random()*26) + 97); //'a'.charCodeAt(0));
            break;
    
            case 3: // big letter
                str += String.fromCharCode(Math.floor(Math.random()*26) + 65); //'A'.charCodeAt(0));
            break;
    
            default:
            break;
        }
    }
    return str;
    }
    
     3
    Author: ropsiU, 2013-01-11 11:00:36

    Aqui está um script de teste para a resposta # 1 (obrigado @csharptest.net)

    O programa corre makeid() 1 million vezes e como você pode ver 5 não é muito único. executá-lo com um comprimento de char de 10 é bastante confiável. Já o fiz umas 50 vezes e ainda não vi um duplicado.:-)

    Nota: O limite de tamanho da pilha de nós excede cerca de 4 milhões, por isso não pode executar este 5 milhões de vezes que não vai acabar.

    function makeid()
    {
        var text = "";
        var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    
        for( var i=0; i < 5; i++ )
            text += possible.charAt(Math.floor(Math.random() * possible.length));
    
        return text;
    }
    
    ids ={}
    count = 0
    for (var i = 0; i < 1000000; i++) {
        tempId = makeid();
        if (typeof ids[tempId] !== 'undefined') {
            ids[tempId]++;
            if (ids[tempId] === 2) {
                count ++;
            }
            count++;
        }else{
            ids[tempId] = 1;
        }
    }
    console.log("there are "+count+ ' duplicate ids');
    
     3
    Author: James Harrington, 2014-08-07 02:08:55

    Pode usar coderain . É uma biblioteca para gerar códigos aleatórios de acordo com um determinado padrão. Usar # Como substituição para caracteres superiores e minúsculos, bem como dígitos:

    var cr = new CodeRain("#####");
    console.log(cr.next());
    

    Existem outras substituições como A para letras maiúsculas ou 9 para dígitos.

    O que pode ser útil é que chamar .next() sempre lhe dará um resultado único para que você não tenha que se preocupar com duplicados.

    Aqui está uma aplicação de demonstração que gera uma lista de códigos aleatórios únicos.

    sou o autor do coderain.

     3
    Author: Lukasz Wiktor, 2017-01-09 14:54:21
    Que tal este pequeno truque compacto?
    var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    var stringLength = 5;
    
    function pickRandom() {
        return possible[Math.floor(Math.random() * possible.length)];
    }
    
    var randomString = Array.apply(null, Array(stringLength)).map(pickRandom).join('');
    

    Você precisa do {[[2]} lá para enganar a matriz vazia para ser uma matriz de indefinidos.

    Se você está codificando para ES2015, então construir o array é um pouco mais simples:
    var randomString = Array.from({ length: stringLength }, pickRandom).join('');
    
     3
    Author: qubyte, 2017-05-03 09:32:25

    O problema com as respostas a "Eu preciso de cadeias aleatórias" perguntas (em qualquer língua)é que praticamente todas as soluções usam uma especificação primária falha de comprimento das cadeias . As próprias perguntas raramente revelam por que as cordas aleatórias são necessárias, mas eu desafio você raramente precisa de cordas aleatórias de comprimento, digamos 8. O que você invariavelmente precisa é de um número de cadeias únicas , por exemplo, para usar como identificadores para algum propósito.

    Há dois leading ways to get strictly unique strings: deterministically (which is not random) and store/compare (which is onerous). O que fazemos? Desistimos do fantasma. Preferimos a singularidade probabilística. Ou seja, aceitamos que há algum risco (ainda que pequeno) de que nossas cordas não serão únicas. É aqui que a compreensão probabilidade de colisão e entropia são úteis. Por isso vou reformular a necessidade invariável como necessidade algumas cadeias de caracteres com um pequeno risco de repetição. Como exemplo concreto, digamos que você quer gerar um potencial de 5 milhões de IDs. Você não quer armazenar e comparar cada nova string, e você quer que eles sejam aleatórios, então você aceita algum risco de repetir. Como exemplo, digamos um risco de menos de 1 em um trilhão de chance de repetição. Então, de que comprimento de corda precisa? Bem, essa questão está subespecializada, pois depende dos caracteres usados. Mas mais importante, está mal orientado. O que precisas é uma especificação da entropia das cordas, não o seu comprimento. A entropia pode ser diretamente relacionada à probabilidade de uma repetição em algum Número de cadeias. O comprimento do texto não pode. E é aqui que uma biblioteca como a EntropyString pode ajudar. Para gerar IDs aleatórios que têm menos de 1 em um trilhão de chance de repetir em 5 milhões de cadeias usando entropy-string:
    import {Random, Entropy} from 'entropy-string'
    
    const random = new Random()
    const bits = Entropy.bits(5e6, 1e12)
    
    const string = random.string(bits)
    

    "44hTNghjNHGGRHqH9"

    entropy-string usa um conjunto de caracteres com 32 caracteres por padrão. Existem outros conjuntos predefinidos de caracteres, e você pode especificar os seus próprios caracteres também. Por exemplo, gerando IDs com a mesma entropia que acima, mas usando caracteres hex:

    import {Random, Entropy, charSet16} from './entropy-string'
    
    const random = new Random(charSet16)
    const bits = Entropy.bits(5e6, 1e12)
    
    const string = random.string(bits)
    

    "27b33372ade513715481f"

    Note a diferença no comprimento do texto devido à diferença no número total de caracteres no conjunto de caracteres utilizado. O risco de repetição no número especificado de cadeias potenciais é o mesmo. Os comprimentos das cordas não são. E o melhor de tudo, o risco de repetir e o número potencial de strings é explícito. Chega de adivinhar com o comprimento do fio.

     3
    Author: dingo sky, 2017-09-02 21:10:44
    Expandindo-se no elegante exemplo da Doubletap, respondendo às questões que Gertas e Dragon trouxeram à tona. Basta adicionar em um laço while para testar essas raras circunstâncias nulas,e limitar os caracteres a cinco.
    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;
    }
    
    Aqui está um jsfiddle a alertar - te com um resultado: http://jsfiddle.net/pLJJ7/
     2
    Author: Steven DAmico, 2013-03-17 00:44:10