JavaScript判断密码强度

2014-02-27 · 7 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 的教程