js实现评估密码的强度

要实现这个功能首先理解js的位操作

下面是具体解释

 

javascrīpt位操作符 [js操作符四 aspxuexi.com]

执行位操作时,操作符会将操作数看作一串二进制位(1和0),而不是十进制、十六进制或八进制数字。例如,十进制的 9 就是二进制的 1001。位操作符在执行的时候会以二进制形式进行操作,但返回的值仍是标准的 Javascrīpt 数值。

从原理上讲,位逻辑操作符的工作流程是这样的:

  • 将操作数转换为 32 位的整型数值并用二进制表示。
  • 第一操作数的每一位与第二操作数的对应位配对:第一位对第一位,第二位对第二位,以此类推。
  • 对每一对位应用操作符,最终结果按位组合起来。

例如,9 的二进制表示为 1001,15 的二进制表示为 1111。所以如果对这两个数应用位逻辑操作符,结果应该像下面这样:

  • 15 & 9 结果为 9 (1111 & 1001 = 1001)
  • 15 | 9 为 15 (1111 | 1001 = 1111)
  • 15 ^ 9 为 6 (1111 ^ 1001 = 0110)

移位操作符
移位操作符需要两个操作数:第一个是要进行移位的数值,第二个指定要对第一个数移位的数目。移位的方向由使用的操作符决定。

移位操作符将把两个操作符转换为 32 位整型数值,并返回与左操作数类型相同的结果。

<< (左移)
该操作符将把第一个操作数向左移若干位。移出的位将被忽略。右侧空位补零。
例如,9<<2 结果为 36,因为 1001 向左移两位变成 100100,这是 36。

>> (算术右移)
该操作符将把第一个操作数享有移若干位。移出的位将被忽略。左侧的空位补上与原来最左面位相同的值。
例如,9>>2 结果为 2,因为 1001 右移两位变成 10,这是 2。反之,-9>>2 结果为 -3,因为要考虑到符号位。

>>> (逻辑右移)
该操作符将把第一个操作数享有移若干位。移出的位将被忽略。左侧的空位补零。
例如,19>>>2 结果为 4,因为 10011 右移两位变成 100,这是 4。对于非负数,算术右移和逻辑右移结果相同。

操作符 用法 描述
按位与 a & b 如果两个操作数对应位都是 1 的话则在该位返回 1。
按位或 a | b 如果两个操作数对应位都是 0 的话则在该位返回 0。
按位异或 a ^ b 如果两个操作数对应位只有一个 1 的话则在该位返回 1。
求反 ~ a 反转操作数的每一位。
左移 a << b 将 a 的二进制形式左移 b 位。右面的空位补零。
算术右移 a >> b 将 a 的二进制形式右移 b 位。忽略被移出的位。
逻辑右移 a >>> b 将 a 的二进制形式右移 b 位。忽略被移出的位,左侧补入 0。

实现该功能的代码

scrīpt type=text/javascrīpt>
图片可在新窗口打开 style=”CURSOR: pointer” src=”http://www.cnblogs.com/Images/OutliningIndicators/None.gif” align=top>        
//CharMode函数 
        //测试某个字符是属于哪一类. 
        function CharMode(iN){
            
if (iN>=48 && iN <=57//数字 
            return 1;
            
if (iN>=65 && iN <=90//大写字母 
            return 2;
            
if (iN>=97 && iN <=122//小写 
            return 4;
            
else
            
return 8//特殊字符 
        }


        
//bitTotal函数 
        //计算出当前密码当中一共有多少种模式 
        function bitTotal(num){
            modes
=0;
            
for (i=0;i<4;i++){
            
if (num & 1) modes++;
            num
>>>=1;
            }

            
return modes;
        }


        
//checkStrong函数 
        //返回密码的强度级别 

        
function checkStrong(sPW){
            
if (sPW.length<=4)
            
return 0//密码太短 
            Modes=0;
            
for (i=0;i<sPW.length;i++){
            
//测试每一个字符的类别并统计一共有多少种模式. 
            Modes|=CharMode(sPW.charCodeAt(i));
        }


        
return bitTotal(Modes);

        }


        
//pwStrength函数 
        //当用户放开键盘或密码输入框失去焦点时,根据不同的级别显示不同的颜色 

        
function pwStrength(pwd){
        O_color
=#eeeeee;
        L_color
=#FF0000;
        M_color
=#FF9900;
        H_color
=#33CC00;
        
if (pwd==null||pwd==”){
        Lcolor
=Mcolor=Hcolor=O_color;
        }

        
else{
        S_level
=checkStrong(pwd);
        
switch(S_level) {
        
case 0:
        Lcolor
=Mcolor=Hcolor=O_color;
        
case 1:
        Lcolor
=L_color;
        Mcolor
=Hcolor=O_color;
        
break;
        
case 2:
        Lcolor
=Mcolor=M_color;
        Hcolor
=O_color;
        
break;
        
default:
        Lcolor
=Mcolor=Hcolor=H_color;
        }

        }


        document.getElementById(
strength_L).style.background=Lcolor;
        document.getElementById(
strength_M).style.background=Mcolor;
        document.getElementById(
strength_H).style.background=Hcolor;
        
return;
        }

 
</scrīpt>

<form name=form1 action=”” >
输入密码:
<input type=password size=10 onKeyUp=pwStrength(this.value) onBlur=pwStrength(this.value)>
<br>密码强度:
<table width=”217″ border=”1″ cellspacing=”0″ cellpadding=”1″ bordercolor=”#cccccc” height=”23″ style=’display:inline’>
<tr align=”center” bgcolor=”#eeeeee”>
<td width=”33%” id=”strength_L”></td>
<td width=”33%” id=”strength_M”></td>
<td width=”33%” id=”strength_H”></td>
</tr>
</table>
</form>

发表评论

电子邮件地址不会被公开。 必填项已用*标注