关于javascript:获取随机数字和字母字符串的最短代码

Shortest code to get random string of numbers and letters

本问题已经有最佳答案,请猛点这里访问。

我现在使用Math.random(),它返回一些数字,比如0.7183306051883847。这个功能有一些不好的方面:

  • 开始时的0.

  • 没有设置符号长度的选项

  • 没有向字符串添加字母的选项

我想知道,生成字符串的最短代码是什么(例如预期字符长度-6)?

  • 2en81u
  • 39438s
  • ldksfn
  • 谢谢。


    这应该是最短的。如果您需要大写,请在尾部添加一个额外的.toUpperCase()调用。

    1
    Math.random().toString(36).substring(3,9)

    更新的

    这个版本有点长,但是它避免了一些特殊的有理数可能没有足够的长度的问题。

    1
    (+new Date * Math.random()).toString(36).substring(0,6)


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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[rnum];
        }
        return randomstring;
    }


    btoa做得很好,但不是特别好:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    > btoa(Math.random())
    "MC43MzU0MzQ4NTk5OTEwNzM2"
    > btoa(Math.random())
    "MC44MTk2NzE0OTIzMjUxNDI="
    > btoa(Math.random())
    "MC41NDgwMzgxMzMxODcyMTk1"
    > btoa(Math.random())
    "MC4wNTk4NDc1NDIzMTc1ODQxNg=="
    > btoa(Math.random())
    "MC41NjA1NzYxNTEzNTc5NjM3"
    > btoa(Math.random())
    "MC4xMTA5MzY5ODY5ODA5NTk3Nw=="
    > btoa(Math.random())
    "MC42NDgwNzM5NjY2MTQ5MDI="
    > btoa(Math.random())
    "MC4zMTkzNTM2OTQzMjkwMzgyNg=="
    > btoa(Math.random())
    "MC4yOTU2OTgyOTE4NTQ5MzI5"
    > btoa(Math.random())
    "MC44ODc3MDEzNjQ0NjY5MjA1"

    注意它们是如何从MC4开始的,因为Math.random().toString()总是从0.开始。


    获取将转换为随机字符串的整数数组,如下所示:

    1
    2
    3
    4
    5
    6
    7
    var myAscii = [],
        someAscii;
    for (var i = 0; i < 5; i +=1) {
        someAscii = Math.floor(Math.random() * (90 - 65)) + 65; // This gives you a random number between 65 and 90, which is the upper case A-Z. Adapt it to your stuff.
        myAscii.push(someAscii);
    }
    var randomString = String.fromCharCode.apply(someAscii);

    无论如何,正如相关答案所建议的那样,获取包含所有所需字符的字符串并执行随机提取是一种更简单的方法。