</script><script language=javascript>
//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;
}
</script>
//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;
}
</script>
if (iN>=48 && iN <=57) //数字
return 1;
if (iN>=65 && iN <=90) //大写字母
return 2;
if (iN>=97 && iN <=122) //小写
return 4;
else
return 8; //特殊字符
}这个是通过字符的ASCII判断的
每个字符都有特定的ascii 判断字符在不在这个范围内
bitTotal这个函数里的if部分没太看懂,想要表达的意思应该是判断密码包含数字、小写字母、大写字母和特殊符号中的几种。
checkStrong这个函数里的for循环部分也没太看懂,最后返回的对象是bitTotal()这个函数,应该是通过这个返回值判断你的密码的级别,比如:简单、一般、复杂等等。
pwStrength这个函数注释已经写清楚了,就是定义几种颜色,根据你密码的强度来显示提示语的背景色。就像你改QQ密码一样,不同的强度,密码后面的提示框就显示不同的颜色。
另外还想说一下,脚本里有的地方写的有问题吧,定义变量都不用var的?还是已经定义好了全局变量?
(1)CharMode根据传入的字符的ascii码返回不同的标志位,总共有4个标志位,如果是数字就是第一位置1,也就是返回0001,如果是小写字母,第二位置1,也就是返回0010(也即十进制的2),大写字母,返回0100,特殊字符返回1000
(2)下面这段代码遍历字符置标志位
Modes=0;
for (i=0;i<sPW.length;i++) {
//测试每一个字符的类别并统计一共有多少种模式
Modes|=CharMode(sPW.charCodeAt(i));
}
这里只要搞明白,如果你有两个字符是小写字母,Modes|=CharMode()或1次第二位就会是1,或2次也是1
这样遍历结束的时候只要判断相应位是否是1就能知道密码中有没有包括这类字符
(3)在bitTotal(num)中,判断num有几位是1,每次判断num的最低位是不是1,然后把num往右移掉1位,判断4次就可以确定num的低4位有几个1,也即是密码包括了几种字符的组合