一、应用场景

  1. 在平时的业务处理中,我们经常会遇到需要产生随机字符的情况:
  2. 例如:密钥、密码口令或者打字游戏等。
  3. 下面我们来一起看一段用javaScript实现的生成随机字符代码。

二、过程详解

面对产生随机字符可以通过一下两种方法来实现:
方法一:
  1. 将所有的字符写成一个字符串。
  2. 然后通过Math()方法里的random()方法,产生一个0-1的随机数。
  3. 乘以字符串长度,得到随机字符。
方法二:
  1. 将字符按不同的种类分开,各自组成字符串。
  2. 然后通过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);
}

总结

  1. 第一种方法虽然比较简单,但是产生的字符鱼龙混杂,不好控制。
  2. 第二章方法通过字符种类来分类,这样就可以指定种类来生成随机字符。
  3. 例如:只想在大写字母、小写字母、数字或者其它字符里生成随机字符。
  4. 可以有json对象里面的四种不同类型的字符串组合,就可以在规定的不同类型里随机产生字符。
  5. 这样外面调用就有了更多的选择权力,使用起来就更方便。