如何在javascript中生成随机十六进制字符串

如何在javascript中生成随机十六进制字符串,javascript,lodash,Javascript,Lodash,如何生成仅包含给定长度的十六进制字符(0123456789abcdef)的随机字符串?如果您可以使用lodash库,则以下是生成16个字符字符串的代码片段: let randomString = _.times(16, () => (Math.random()*0xF<<0).toString(16)).join(''); let randomString=uu.times(16,()=>(Math.random()*0xF有几种方法。一种方法是从预定义字符串中提取: fun

如何生成仅包含给定长度的十六进制字符(0123456789abcdef)的随机字符串?

如果您可以使用lodash库,则以下是生成16个字符字符串的代码片段:

let randomString = _.times(16, () => (Math.random()*0xF<<0).toString(16)).join('');

let randomString=uu.times(16,()=>(Math.random()*0xF有几种方法。一种方法是从预定义字符串中提取:

function genHexString(len) {
    const hex = '0123456789ABCDEF';
    let output = '';
    for (let i = 0; i < len; ++i) {
        output += hex.charAt(Math.floor(Math.random() * hex.length));
    }
    return output;
}
函数genHexString(len){
常量十六进制='0123456789ABCDEF';
让输出=“”;
for(设i=0;i
另一种方法是附加一个0到15之间的随机数,并使用toString转换为十六进制:

function genHexString(len) {
    let output = '';
    for (let i = 0; i < len; ++i) {
        output += (Math.floor(Math.random() * 16)).toString(16);
    }
    return output;
}
函数genHexString(len){
让输出=“”;
for(设i=0;i
使用扩展运算符和
.map()


演示1
const genRanHex=size=>[…数组(大小)].map(()=>Math.floor(Math.random()*16).toString(16)).join(“”);
控制台日志(genRanHex(6));
控制台日志(genRanHex(12));

log(genRanHex(3));
这是一个避免一次生成一个数字的版本;它可能只适用于较短的长度

function genHexString(len) {
    const str = Math.floor(Math.random() * Math.pow(16, len)).toString(16);
    return "0".repeat(len - str.length) + str;
}

这适用于长度不超过13:

randomHex=length=>(
“0”。重复(长度)
+数学地板((数学随机()*16**长度))
.toString(16)
).切片(-长度);
控制台日志(随机十六进制(4));
控制台日志(随机十六进制(6));
控制台日志(randomHex(13));

console.log(randomHex(20));
什么是“十六进制字符”,即
aAbBfF
有效吗?还有,“正常”random还是crypto strong random?更新的问题。普通的random就足够了…parseInt从字符串返回整数,其中包括使用指定基数编码的数字,而不是相反的方式。你完全正确,我不知道我在想什么,感谢你发现了这一点,@LukášŘádek请参阅更新。你知道它不成功的可能性有多大吗当两个客户端generate@Naga不够安全。我最终创建了一个miro服务来跟踪客户端中16个字符的十六进制字符串。如果您只需要4位数字,我想您可以将前16位改为4位。