1/* 2 * -------------------------------------------------------------------- 3 * Simple Password Strength Checker 4 * by Siddharth S, www.ssiddharth.com, [email protected] 5 * for Net Tuts, www.net.tutsplus.com 6 * Version: 1.0, 05.10.2009 7 * -------------------------------------------------------------------- 8 */ 9 10$(document).ready(function() 11{ 12 var strPassword; 13 var charPassword; 14 var complexity = $("#complexity"); 15 var minPasswordLength = 6; 16 var baseScore = 0, score = 0; 17 18 var num = {}; 19 num.Excess = 0; 20 num.Upper = 0; 21 num.Numbers = 0; 22 num.Symbols = 0; 23 24 var bonus = {}; 25 bonus.Excess = 3; 26 bonus.Upper = 4; 27 bonus.Numbers = 5; 28 bonus.Symbols = 5; 29 bonus.Combo = 0; 30 bonus.FlatLower = 0; 31 bonus.FlatNumber = 0; 32 33 outputResult(); 34 $("#inputPassword").bind("keyup", checkVal); 35 36function checkVal() 37{ 38 init(); 39 40 if (charPassword.length >= minPasswordLength) 41 { 42 baseScore = 50; 43 analyzeString(); 44 calcComplexity(); 45 } 46 else 47 { 48 baseScore = 0; 49 } 50 51 outputResult(); 52} 53 54function init() 55{ 56 strPassword= $("#inputPassword").val(); 57 charPassword = strPassword.split(""); 58 59 num.Excess = 0; 60 num.Upper = 0; 61 num.Numbers = 0; 62 num.Symbols = 0; 63 bonus.Combo = 0; 64 bonus.FlatLower = 0; 65 bonus.FlatNumber = 0; 66 baseScore = 0; 67 score =0; 68} 69 70function analyzeString () 71{ 72 for (i=0; i<charPassword.length;i++) 73 { 74 if (charPassword[i].match(/[A-Z]/g)) {num.Upper++;} 75 if (charPassword[i].match(/[0-9]/g)) {num.Numbers++;} 76 if (charPassword[i].match(/(.*[!,@,#,$,%,^,&,*,?,_,~])/)) {num.Symbols++;} 77 } 78 79 num.Excess = charPassword.length - minPasswordLength; 80 81 if (num.Upper && num.Numbers && num.Symbols) 82 { 83 bonus.Combo = 25; 84 } 85 86 else if ((num.Upper && num.Numbers) || (num.Upper && num.Symbols) || (num.Numbers && num.Symbols)) 87 { 88 bonus.Combo = 15; 89 } 90 91 if (strPassword.match(/^[\sa-z]+$/)) 92 { 93 bonus.FlatLower = -15; 94 } 95 96 if (strPassword.match(/^[\s0-9]+$/)) 97 { 98 bonus.FlatNumber = -35; 99 } 100} 101 102function calcComplexity() 103{ 104 score = baseScore + (num.Excess*bonus.Excess) + (num.Upper*bonus.Upper) + (num.Numbers*bonus.Numbers) + (num.Symbols*bonus.Symbols) + bonus.Combo + bonus.FlatLower + bonus.FlatNumber; 105 106} 107 108function outputResult() 109{ 110 if ($("#inputPassword").val()== "") 111 { 112 complexity.html("Enter your password").removeClass("weak strong stronger strongest").addClass("default"); 113 } 114 else if (charPassword.length < minPasswordLength) 115 { 116 complexity.html("At least " + minPasswordLength+ " characters please!").removeClass("strong stronger strongest").addClass("weak"); 117 } 118 else if (score<50) 119 { 120 complexity.html("Weak!").removeClass("strong stronger strongest").addClass("weak"); 121 } 122 else if (score>=50 && score<75) 123 { 124 complexity.html("Average!").removeClass("stronger strongest").addClass("strong"); 125 } 126 else if (score>=75 && score<100) 127 { 128 complexity.html("Strong!").removeClass("strongest").addClass("stronger"); 129 } 130 else if (score>=100) 131 { 132 complexity.html("Secure!").addClass("strongest"); 133 } 134 135 136 $("#details").html("Base Score :<span class=\"value\">" + baseScore + "</span>" 137 + "<br />Length Bonus :<span class=\"value\">" + (num.Excess*bonus.Excess) + " ["+num.Excess+"x"+bonus.Excess+"]</span> " 138 + "<br />Upper case bonus :<span class=\"value\">" + (num.Upper*bonus.Upper) + " ["+num.Upper+"x"+bonus.Upper+"]</span> " 139 + "<br />Number Bonus :<span class=\"value\"> " + (num.Numbers*bonus.Numbers) + " ["+num.Numbers+"x"+bonus.Numbers+"]</span>" 140 + "<br />Symbol Bonus :<span class=\"value\"> " + (num.Symbols*bonus.Symbols) + " ["+num.Symbols+"x"+bonus.Symbols+"]</span>" 141 + "<br />Combination Bonus :<span class=\"value\"> " + bonus.Combo + "</span>" 142 + "<br />Lower case only penalty :<span class=\"value\"> " + bonus.FlatLower + "</span>" 143 + "<br />Numbers only penalty :<span class=\"value\"> " + bonus.FlatNumber + "</span>" 144 + "<br />Total Score:<span class=\"value\"> " + score + "</span>" ); 145} 146 147} 148);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.