js判断 密码强度验证方法(转载)

转载于:http://kongcodecenter.iteye.com/blog/1315305
  1. /* 
  2.  *说明: 
  3.  *  该方法主要分析密码的内容构成,密码长度等情况,然后评分划分密码强度等级 
  4.  *参数: 
  5.  *  pwd 密码,字符串类型 
  6.  *  obj 密码强度显示的地方,必须是jquery封装对象  
  7.  *  minLen 密码最小长度 
  8.  *  maxLen 密码最大长度 
  9.  */  
  10. function showPassstrength(pwd, obj, minLen, maxLen) {  
  11.     var dictionary = [];  
  12.   
  13.     var containsAToZ = function(str) {  
  14.         var aToZ = [ "a""b""c""d""e""f""g""h""i""j""k",  
  15.                 "l""m""n""o""p""q""r""s""t""u""v""w",  
  16.                 "x""y""z" ];  
  17.         var r = false;  
  18.         for ( var i = 0; i < aToZ.length; i++) {  
  19.             if (str.indexOf(aToZ[i]) >= 0) {  
  20.                 r = true;  
  21.                 break;  
  22.             }  
  23.         }  
  24.         return r;  
  25.     }  
  26.   
  27.     var containsNumber = function(str) {  
  28.         var numbers = [ "0""1""2""3""4""5""6""7""8""9" ];  
  29.         var r = false;  
  30.         for ( var i = 0; i < numbers.length; i++) {  
  31.             if (str.indexOf(numbers[i]) >= 0) {  
  32.                 r = true;  
  33.                 break;  
  34.             }  
  35.         }  
  36.         return r;  
  37.     }  
  38.   
  39.     var contains_ = function(str) {  
  40.         return str.indexOf("_") >= 0 ? true : false;  
  41.     }  
  42.   
  43.     var isANumberSequence = function(str) {  
  44.         var array = str.split("");  
  45.         var eq = true;  
  46.         var num = parseInt(array[1]);  
  47.         var diff = num - parseInt(array[0])  
  48.         for ( var i = 2; i < array.length; i++) {  
  49.             if (parseInt(array[i]) != num + diff) {  
  50.                 eq = false;  
  51.                 break;  
  52.             }  
  53.             num = array[i];  
  54.         }  
  55.         return eq;  
  56.     }  
  57.   
  58.     var reverse = function(str) {  
  59.         return str.split("").reverse().join("");  
  60.     }  
  61.   
  62.     pwd = pwd.toLowerCase();  
  63.     var level = 1;  
  64.     /** ****************加分因子***************** */  
  65.     if (containsAToZ(pwd)) {  
  66.         level++;  
  67.     }  
  68.     if (containsNumber(pwd)) {  
  69.         level++;  
  70.     }  
  71.     if (contains_(pwd)) {  
  72.         level++;  
  73.     }  
  74.     if ((containsAToZ(pwd) && containsNumber(pwd))  
  75.             || (containsAToZ(pwd) && contains_(pwd))  
  76.             || (containsNumber(pwd) && contains_(pwd))) {  
  77.         level++;  
  78.     }  
  79.     if (containsAToZ(pwd) && containsNumber(pwd) && contains_(pwd)) {  
  80.         level++;  
  81.     }  
  82.     /** ****************减分因子***************** */  
  83.     if (pwd.length < (minLen + maxLen) / 2 && pwd.length >= minLen) {  
  84.         level--;  
  85.     }  
  86.     var pwdArray = pwd.split("");  
  87.     // 全部由同一个字符组成的直接判为弱  
  88.     var allEquals = true;  
  89.     var element = pwdArray[0];  
  90.     for ( var i = 1; i < pwdArray.length; i++) {  
  91.         if (pwdArray[i] != element) {  
  92.             allEquals = false;  
  93.             break;  
  94.         }  
  95.         element = pwdArray[i];  
  96.     }  
  97.     if (allEquals)  
  98.         level = 0;  
  99.     // 纯数字的密码不能是一个等差数列数列  
  100.     if (/^[0-9]+$/.test(pwd)  
  101.             && (isANumberSequence(pwd) || isANumberSequence(reverse(pwd)))) {  
  102.         level--;  
  103.     }  
  104.     // 不能由连续的字母组成,例如:abcdefg  
  105.     if ("abcdefghijklmnopqrstuvwxyz".indexOf(pwd) > 0) {  
  106.         level--;  
  107.     }  
  108.     // 纯字母组成的密码不能是键盘上的相邻键位字母组合,例如:qwertyu  
  109.     if ("qwertyuiop".indexOf(pwd) > 0 || "asdfghjkl".indexOf(pwd) > 0  
  110.             || "zxcvbnm".indexOf(pwd) > 0) {  
  111.         level--;  
  112.     }  
  113.     // 不能是2段短字符的重复,例如:567567  
  114.     if (pwd.length % 2 == 0) {  
  115.         var part1 = pwd.substring(0, pwd.length / 2);  
  116.         var part2 = pwd.substring(pwd.length / 2);  
  117.         if (part1 == part2)  
  118.             level--;  
  119.     }  
  120.     // 不能是3段短字符的重复,例如:121212  
  121.     if (pwd.length % 3 == 0) {  
  122.         var part1 = pwd.substring(0, pwd.length / 3);  
  123.         var part2 = pwd.substring(pwd.length / 3, pwd.length / 3 * 2);  
  124.         var part3 = pwd.substring(pwd.length / 3 * 2);  
  125.         if (part1 == part2 && part2 == part3)  
  126.             level--;  
  127.     }  
  128.     // 不能是一个日期,例如:19870723  
  129.     if (/^[0-9]+$/.test(pwd)) {  
  130.         if (pwd.length == 8) {  
  131.             var year = parseInt(pwd.substring(0, 4));  
  132.             var month = parseInt(pwd.substring(4, 6));  
  133.             var day = parseInt(pwd.substring(5, 7));  
  134.             if (year >= 1000 && year < 2100 && month >= 1 && month <= 12  
  135.                     && day >= 1 && day <= 31) {  
  136.                 level--;  
  137.             }  
  138.         }  
  139.     }  
  140.     // 不能位于内置字典内  
  141.     for ( var i = 0; i < dictionary.length; i++) {  
  142.         if (pwd == dictionary[i] || dictionary[i].indexOf(pwd) >= 0) {  
  143.             level--;  
  144.             break;  
  145.         }  
  146.     }  
  147.   
  148.     if (level < 0)  
  149.         level = 0;  
  150.     if (level > 5)  
  151.         level = 5;  
  152.     var levelNames = [ "很弱""较弱""一般""较好""良好""优秀" ];  
  153.     obj.html(levelNames[level]);  
  154. }  

使用:
// 验证pws.js
showPassstrength("admin909909%^", $("#span_testPwd"), 6, 10);


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值