suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie erstelle ich eine zufällige alphanumerische Zeichenfolge in JavaScript?

Was ist der kürzeste Weg (im Rahmen des Zumutbaren), eine zufällige alphanumerische Zeichenfolge (Großbuchstaben, Kleinbuchstaben und Zahlen) zu generieren, die als mögliche eindeutige Kennung in JavaScript verwendet werden kann?

P粉775788723P粉775788723403 Tage vor715

Antworte allen(2)Ich werde antworten

  • P粉312195700

    P粉3121957002023-10-13 12:38:49

    我刚刚发现这是一个非常好的和优雅的解决方案:

    Math.random().toString(36).slice(2)

    此实现的注释:

    • 这将生成长度介于 0 到 12 个字符之间的字符串,通常为 11 个字符,因为浮点字符串化会删除尾随零。
    • 它不会生成大写字母,只会生成小写字母和数字。
    • 由于随机性来自 Math.random(),因此输出可能是可预测的,因此不一定是唯一的。
    • 即使假设实现理想,输出也最多具有 52 位熵,这意味着在生成大约 70M 字符串后,您可能会出现重复项。

    Antwort
    0
  • P粉985686557

    P粉9856865572023-10-13 09:56:40

    如果您只想允许特定字符,您也可以这样做:

    function randomString(length, chars) {
        var result = '';
        for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
        return result;
    }
    var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

    这里有一个 jsfiddle 来演示:http://jsfiddle.net/wSQBx/

    另一种方法是使用一个特殊的字符串来告诉函数要使用什么类型的字符。你可以这样做:

    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!'));

    小提琴:http://jsfiddle.net/wSQBx/2/

    或者,要使用如下所述的 base36 方法,您可以执行以下操作:

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

    Antwort
    0
  • StornierenAntwort