JavaScript 判断密码强度
2014-02-25 · 377 chars · 2 min read
先上 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 的教程。