免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2895 | 回复: 1
打印 上一主题 下一主题

我写的密码强度验证方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-18 17:09 |只看该作者 |倒序浏览
我写的密码强度验证方法











Javascript代码
  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. }  
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-12-19 11:28 |只看该作者
楼主很有哦 多多交流
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP