我正在尝试使用JS生成6位数代码。
它必须包含3位数字和3个字符。
这是我的代码
var numbers = "0123456789";
var chars = "acdefhiklmnoqrstuvwxyz";
var string_length = 3;
var randomstring = '';
var randomstring2 = '';
for (var x = 0; x < string_length; x++) {
var letterOrNumber = Math.floor(Math.random() * 2);
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum, rnum + 1);
}
for (var y = 0; y < string_length; y++) {
var letterOrNumber2 = Math.floor(Math.random() * 2);
var rnum2 = Math.floor(Math.random() * numbers.length);
randomstring2 += numbers.substring(rnum2, rnum2 + 1);
}
var code = randomstring + randomstring2;
代码结果将是3chars + 3个数字..我想重新排列此值为随机值包含相同的3个字符和3个数字
答案 0 :(得分:1)
以下是您的代码
function(count){
var chars = 'acdefhiklmnoqrstuvwxyz0123456789'.split('');
var result = '';
for(var i=0; i<count; i++){
var x = Math.floor(Math.random() * chars.length);
result += chars[x];
}
return result;
}
答案 1 :(得分:1)
您可以使用此类函数(来自this answer)
来随机播放当前代码//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]
function shuffle(o){ //v1.0
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
您可以像这样使用它:
alert(shuffle("StackOverflow".split('')).join(''));
Here是使用此代码的更新演示。
答案 2 :(得分:0)
你可以做的是使用6次的幽灵循环并逐个使用随机字符和随机数函数,同时也增加1,虽然不是一个好的选择,但这也可以提供一些灵活性
答案 3 :(得分:0)
试试这个:
var numbers = "0123456789";
var chars= "acdefhiklmnoqrstuvwxyz";
var code_length = 6;
var didget_count = 3;
var letter_count = 3;
var code = '';
for(var i=0; i < code_length; i++) {
var letterOrNumber = Math.floor(Math.random() * 2);
if((letterOrNumber == 0 || number_count == 0) && letter_count > 0) {
letter_count--;
var rnum = Math.floor(Math.random() * chars.length);
code += chars[rnum];
}
else {
number_count--;
var rnum2 = Math.floor(Math.random() * numbers.length);
code += numbers[rnum2];
}
}
我可能会注意到这样的代码不应该被认为是真正随机的,因为底层函数可以根据下面运行的javascipt引擎进行预测。