一、应用场景
- 在平时的业务处理中,我们经常会遇到需要产生随机字符的情况:
- 例如:密钥、密码口令或者打字游戏等。
- 下面我们来一起看一段用javaScript实现的生成随机字符代码。
二、过程详解
面对产生随机字符可以通过一下两种方法来实现:
方法一:
- 将所有的字符写成一个字符串。
- 然后通过Math()方法里的random()方法,产生一个0-1的随机数。
- 乘以字符串长度,得到随机字符。
方法二:
- 将字符按不同的种类分开,各自组成字符串。
- 然后通过json对象按照键值对方式存储。
由于方法一过于简单,我只将方法二部分代码展示:
var randomChar = function (alphaType) {
//将字符分类存储,以16位进制为键,对于的字符串为值。
var codeList = {
0x01 : "ABCDEFGHIJKLMNOPQRSTUVWSYZ",
0x02 : "abcdefghijklmnopqrstuvwsyz",
0x04 : "0123456789",
0x08 : "[];',./!@#$%^&*()<>?",
};
//如果选择的字母类型不符合要求,就以第一种类型为默认值
//这里穿过来的数据有效范围1-15,可以根据关键字有不同的组合,
//这就是下面循环里使用位运算判断的好处
if (typeof alphaType!== 'number'
|| alphaType == undefined
|| alphaType <= 0 || alphaType > 0x0f) {
alphaType = 0x01;
}
str = "";
//按照位运算遍历
for (var i = 1; i <= 8; i <<= 1) {
//将传过来的值与json里面是16进制键按位相与,如果不等于0,说明相等
if ((alphaType & i) != 0) {
//通过键取到对应的字符串并追加到后面
str += codeList[i];
}
}
var len = str.length;
//由于Math.random()产生的随机数范围是0-1,
//所以乘以对应字符串的长度,得到的数值就在该字符串长度范围内,并向下取整
var randValue = Math.floor(Math.random() * len);
//取该随机数值多对应的字符返回
return str.substring(randValue, randValue+1);
}
总结
- 第一种方法虽然比较简单,但是产生的字符鱼龙混杂,不好控制。
- 第二章方法通过字符种类来分类,这样就可以指定种类来生成随机字符。
- 例如:只想在大写字母、小写字母、数字或者其它字符里生成随机字符。
- 可以有json对象里面的四种不同类型的字符串组合,就可以在规定的不同类型里随机产生字符。
- 这样外面调用就有了更多的选择权力,使用起来就更方便。