📅  最后修改于: 2023-12-03 14:56:17.158000             🧑  作者: Mango
有时候,我们需要在 JavaScript 应用程序中生成随机字符串。这可能是为了生成随机密码、邀请码、ID 等。
在这篇文章中,我们将介绍生成随机字母数字字符串的几种方法。
使用 Math.random() 函数生成随机数字,然后将其转换为对应的字符,即可生成随机字母数字字符串。
function generateRandomString(length) {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
// Usage
generateRandomString(10); // Output: "NGL2Jy4lXl"
上述函数中,通过 Math.random() 函数生成一个范围在 0 到 1 之间(不含 1)的随机值。然后将其乘以字符集的长度(即 charactersLength),并使用 Math.floor() 函数将其舍入到最接近的整数。
最后,通过字符串的 charAt() 函数获取指定位置上的字符,并将其添加到结果字符串中。
crypto.getRandomValues() 函数生成高质量的随机数。该函数使用本地硬件(如硬件随机数生成器)来生成随机值。
function generateRandomString(length) {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const charactersLength = characters.length;
const cryptoObj = window.crypto || window.msCrypto;
if (cryptoObj) {
const randomValues = new Uint32Array(length);
cryptoObj.getRandomValues(randomValues);
for (let i = 0; i < length; i++) {
result += characters.charAt(randomValues[i] % charactersLength);
}
} else {
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
}
return result;
}
// Usage
generateRandomString(10); // Output: "rzCB7V1ePK"
该函数中的主要区别在于,它使用 crypto.getRandomValues() 函数生成随机值。然后通过取模运算符(%)将其映射为字符集的索引,并获取对应的字符。
除了手动编写代码之外,还可以使用现有的库来生成随机字母数字字符串。
在这里,我们将使用 Chance.js 库。
const chance = require('chance').Chance();
function generateRandomString(length) {
return chance.string({
length: length,
pool: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
});
}
// Usage
generateRandomString(10); // Output: "vzSG9fRMfx"
在上面的示例中,我们使用了 Chance.js 中的 string() 函数来生成随机字符串。该函数传入一个选项对象,其中包括所需长度和字符集。
总的来说,这里介绍了三种通用的生成随机字母数字字符串的方法:使用 Math.random() 函数、使用 crypto.getRandomValues() 函数以及使用库(如 Chance.js)。我们可以根据需要选择适合我们应用程序的最佳方法。