1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*最后的评分标准:
     >= 90: 非常安全
     >= 80: 安全(Secure)
     >= 70: 非常强
     >= 60: 强(Strong)
     >= 50: 一般(Average)
     >= 25: 弱(Weak)
     >= 0: 非常弱*/
function  grade(passwd){
     var  grade=0;
       
     //判断密码是否存在
     if (!passwd){
         return  grade;
     }
     var  liHtml= $( "#tips" );
       
     //判断是否属于弱密码
     if (weakPasswd(passwd)){
         grade=0;
         liHtml.append( "<li>您的密码为弱密码,获得0分</li>" );
         return  grade;
     }
       
     //判断长度。并给出分数
     /*密码长度:
     0 分: 小于等于 4 个字符
     10 分: 5 到 7 字符
     20 分: 大于8 个字符*/
     //grade += passwd.length<=4?0:(passwd.length>8?20:10);
     if (passwd.length<=4){
         grade +=0;
         liHtml.append( "<li>您的密码长度小于或等于4位,获得0分</li>" );
     } else  if  (passwd.length>8){
         grade+=20;
         liHtml.append( "<li>您的密码长度大于8位,获得20分</li>" );
     } else {
         grade+=10;
         liHtml.append( "<li>您的密码长度介于5~~8位,获得10分</li>" );
     }
       
     //alert("密码长度:"+grade);
       
     /*字母:
     0 分: 没有字母
     10 分: 全都是小(大)写字母
     20 分: 大小写混合字母*/
     //grade += !passwd.match(/[a-z]/i)?0:(passwd.match(/[a-z]/) && passwd.match(/[A-Z]/)?20:10);
     if (!passwd.match(/[a-z]/i)){
         grade+=0;
         liHtml.append( "<li>您的密码不包含字母,获得0分</li>" );
     } else  if  (passwd.match(/[a-z]/)&& passwd.match(/[A-Z]/) ){
         grade+=20;
         liHtml.append( "<li>您的密码含有大小写混合字母,获得20分</li>" );
     } else {
         grade+=10;
         liHtml.append( "<li>您的密码只含有大写或小写字母,获得10分</li>" );
     }
       
       
     //alert("字母:"+grade);
     /*数字:
     0 分: 没有数字
     10 分: 1 个数字
     15 分: 大于等于 3 个数字*/
     //grade += !passwd.match(/[0-9]/)?0:(passwd.match(/[0-9]/g).length >= 3?15:10);
     if (!passwd.match(/[0-9]/)){
         grade+=0;
         liHtml.append( "<li>您的密码不包含数字,获得0分</li>" );
     } else  if  ((passwd.match(/[0-9]/g)).length >3){
         grade+=15;
         liHtml.append( "<li>您的密码含有3位以上的数字,获得15分</li>" );
     } else {
         grade+=10;
         liHtml.append( "<li>您的密码含有1~~3位数字,获得10分</li>" );
     }
     //alert("数字:"+grade);
       
     /*符号:
     0 分: 没有符号
     10 分: 1 个符号
     20 分: 大于 1 个符号*/
     //grade += !passwd.match(/\W/)?0:(passwd.match(/\W/g).length > 1?20:10);
     if (!passwd.match(/\W/)){
         grade+=0;
         liHtml.append( "<li>您的密码不包含特殊字符,获得0分</li>" );
     } else  if  ((passwd.match(/\W/g)).length > 1){
         grade+=20;
         liHtml.append( "<li>您的密码含有2位及以上的特殊字符,获得15分</li>" );
     } else {
         grade+=10;
         liHtml.append( "<li>您的密码含有1位特殊字符,获得10分</li>" );
     }
       
     //alert("符号:"+grade);
     /*字符重复
     5 分:有重复字符
     10分:无重复字符*/
     //grade +=!passwd.match(/(.+)\1{2,}/gi)?10:5;
     if (!passwd.match(/(.+)\1{2,}/gi)){
         grade+=10;
         liHtml.append( "<li>您的密码不含有重复字符,获得10分</li>" );
     } else {
         grade+=5;
         liHtml.append( "<li>您的密码含有重复字符,获得5分</li>" );
     }
     //alert("字符重复:"+grade);
       
     /*奖励:
    2 0 分: 只有字母或数字
      5 分: 只有字母和数字
   3  10 分: 字母、数字和符号
   5  15 分: 大小写字母、数字和符号*/
     //grade += !passwd.match(/[0-9]/) || !passwd.match(/[a-z]/i)?0:(!passwd.match(/\W/)?5:(!passwd.match(/[a-z]/) || !passwd.match(/[A-Z]/)?10:15));   
     if (!passwd.match(/[0-9]/) || !passwd.match(/[a-z]/i)){
         grade+=0;
         liHtml.append( "<li>鉴于您密码的复杂度,不给你的奖励分</li>" );
     else  if  ( !passwd.match(/\W/)){
         grade+=5;
         liHtml.append( "<li>鉴于您密码的复杂度,给你的奖励5分</li>" );
     else  if  (!passwd.match(/[a-z]/) || !passwd.match(/[A-Z]/)){
         grade+=10;
         liHtml.append( "<li>鉴于您密码的复杂度,给你的奖励10分</li>" );
     } else {
         grade+=15;
         liHtml.append( "<li>鉴于您密码的复杂度,给你的奖励15分</li>" );
     }
       
     //alert("奖励:"+grade);
       
       
       
       
       
     return  grade;
}
function  weakPasswd(password) {
         var  i = (commonPasswords && commonPasswords.length) || 0,
         rank;
         while  (i--) {
             if  (password.toLowerCase() === commonPasswords[i]) {
                // rank = formatNumber(Math.ceil((i + 1) / 10) * 10);
                 return  true ;
             }
         }
         return  false ;
     }