先上 Demo,下面是代码:
;(function ($) {
/*
* 0-弱
* 1-中
* 2-强
*/
var pswstrength = function () {}
pswstrength.prototype = {
constructor: pswstrength,
//Unicode 编码区分数字,字母,特殊字符
CharMode: function (iN) {
if (iN >= 48 && iN <= 57)
//数字(U+0030 - U+0039)
return 1 //二进制是0001
if (iN >= 65 && iN <= 90)
//大写字母(U+0041 - U+005A)
return 2 //二进制是0010
if (iN >= 97 && iN <= 122)
//小写字母(U+0061 - U+007A)
return 4
//二进制是0100
//其他算特殊字符
else return 8 //二进制是1000
},
bitTotal: function (num) {
modes = 0
for (i = 0; i < 4; i++) {
if (num & 1)
//num不是0的话
modes++ //复杂度+1
num >>>= 1 //num右移1位
}
return modes
},
check: function (sPW) {
if (sPW.length < 7)
//小于7位,直接“弱”
return 0
Modes = 0
for (i = 0; i < sPW.length; i++) {
//密码的每一位执行“位运算 OR”
Modes |= this.CharMode(sPW.charCodeAt(i))
}
return this.bitTotal(Modes)
},
}
if (typeof $.pswstrength == 'undefined' || $.pswstrength == null) {
$.pswstrength = new pswstrength()
}
})(jQuery)
原理主要利用二进制数,数字标记为 1,大写字母标记为 2,小写字母标记为 4,特殊字符标记为 8,他们的二进制数如下表:
- 1: 0001
- 2: 0010
- 4: 0100
- 8: 1000
位运算 OR 计算密码的每一位,得到一个四位的二进制数,从而得出密码强度。
如果不了解位运算的话,可以看看 W3School 的教程。