Heim > Fragen und Antworten > Hauptteil
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粉3121957002023-10-13 12:38:49
我刚刚发现这是一个非常好的和优雅的解决方案:
Math.random().toString(36).slice(2)
此实现的注释:
Math.random()
,因此输出可能是可预测的,因此不一定是唯一的。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); }