如何验证输入密码的强弱度

来源:互联网 发布:qq数据抓包 编辑:程序博客网 时间:2024/05/04 08:03

//密码强度;  www.jsphelp.com
function PasswordStrength(showed){ 
 this.showed = (typeof(showed) == "boolean")?showed:true;
 this.styles = new Array(); 
 this.styles[0] = {backgroundColor:"#EBEBEB",borderLeft:"solid 1px #FFFFFF",borderRight:"solid 1px #BEBEBE",borderBottom:"solid 1px #BEBEBE"}; 
 this.styles[1] = {backgroundColor:"#FF4545",borderLeft:"solid 1px #FFFFFF",borderRight:"solid 1px #BB2B2B",borderBottom:"solid 1px #BB2B2B"};
 this.styles[2] = {backgroundColor:"#FFD35E",borderLeft:"solid 1px #FFFFFF",borderRight:"solid 1px #E9AE10",borderBottom:"solid 1px #E9AE10"};
 this.styles[3] = {backgroundColor:"#95EB81",borderLeft:"solid 1px #FFFFFF",borderRight:"solid 1px #3BBC1B",borderBottom:"solid 1px #3BBC1B"};
 
 this.labels= ["弱","中","强"];

 this.divName = "pwd_div_"+Math.ceil(Math.random()*100000);
 this.spanMsg = "";
// this.spanMsg = "<a href='javascript:;' onclick='window.open(/"pwdteacher.htm/",/"pwdteacher/",/"width=500,height=300/")'><font style='line-height:25px;font-family: Courier New, Courier, mono;font-size: 12px;color:#ff0000;'>教你如何设置一个更安全的密码</font></a>";
 this.minLen = 5;
 
 this.width = "150px";
 this.height = "16px";
 
 this.content = "";
 
 this.selectedIndex = 0;
 
 this.init(); 
}

PasswordStrength.prototype.init = function(){
 var s = '<table cellpadding="0" id="'+this.divName+'_table" cellspacing="0" style="width:'+this.width+';height:'+this.height+';">';
 s += '<tr>';
 for(var i=0;i<3;i++){
  s += '<td id="'+this.divName+'_td_'+i+'" width="33%" align="center"><span style="font-size:1px">&nbsp;</span><span id="'+this.divName+'_label_'+i+'" style="font-family: Courier New, Courier, mono;font-size: 12px;color: #999999;">'+this.labels[i]+'</span></td>';
 }
 s += '</tr>';
 s += '</table>';
 s += '<span id="'+this.divName+'_span_msg" style="display:none;">';
 s += this.spanMsg;
 s += '</span>'; 

 this.content = s;
 if(this.showed){
  document.write(s);
  this.copyToStyle(this.selectedIndex);
 } 
}
PasswordStrength.prototype.copyToObject = function(o1,o2){
 for(var i in o1){
  o2[i] = o1[i];
 }
}
PasswordStrength.prototype.copyToStyle = function(id){
 this.selectedIndex = id;
 for(var i=0;i<3;i++){
  if(i == id-1){
   this.$(this.divName+"_label_"+i).style.color = "#000000";
  }else{
   this.$(this.divName+"_label_"+i).style.color = "#999999";
  }
 }
 for(var i=0;i<id;i++){
  this.copyToObject(this.styles[id],this.$(this.divName+"_td_"+i).style);   
 }
 for(;i<3;i++){
  this.copyToObject(this.styles[0],this.$(this.divName+"_td_"+i).style);
 }
}
PasswordStrength.prototype.$ = function(s){
 return document.getElementById(s);
}
PasswordStrength.prototype.setSize = function(w,h){
 this.width = w;
 this.height = h;
}
PasswordStrength.prototype.setMinLen = function(n){
 if(isNaN(n)){
  return ;
 }
 n = Number(n);
 if(n>1){
  this.minLen = n;
 }
}
PasswordStrength.prototype.setStyles = function(){
 if(arguments.length == 0){
  return ;
 }
 for(var i=0;i<arguments.length && i < 4;i++){
  this.styles[i] = arguments[i];
 }
 this.copyToStyle(this.selectedIndex);
}
PasswordStrength.prototype.write = function(s){
 if(this.showed){
  return ;
 }
 var n = (s == 'string') ? this.$(s) : s;
 if(typeof(n) != "object"){
  return ;
 }
 n.innerHTML = this.content;
 this.copyToStyle(this.selectedIndex);
}
PasswordStrength.prototype.update = function(s)
{
 if(s.length < this.minLen){
  this.copyToStyle(0);
  return;
 }
 var ls = this.getLevel(s);
  switch(ls) {
   case 1:
    this.$(this.divName+"_span_msg").style.display = "";
    this.copyToStyle(1);
    break;
   case 2:
    this.$(this.divName+"_span_msg").style.display = "";
    this.copyToStyle(2);
    break;
   case 3:
    this.$(this.divName+"_span_msg").style.display = "none";
    this.copyToStyle(3);
    break;
   default:
    this.$(this.divName+"_span_msg").style.display = "none";
    this.copyToStyle(0);
  }
}
PasswordStrength.prototype.getLevel = function(s)
{
 var ls = 0;
 if (s.length < 6){
  return 0;
 } 
 if (s.match(/[a-z]/ig)){
  ls++;
 }
 if (s.match(/[0-9]/ig)){
  ls++;
 }
  if (s.match(/(.[^a-z0-9])/ig)){
  ls++;
 }
 if (s.length < 6 && ls > 1){
  ls--;
 } 
 if (s.length >= 8 && ls == 2){
  ls++;
 } 

 if (!this.samePwd(s) && ls > 1){
  ls--;
 }
 if (!this.increasePwd(s) && ls > 1){
  ls--;
 }
 if (!this.descendingPwd(s) && ls > 1){
  ls--;
 }
 
 return ls;
}

PasswordStrength.prototype.samePwd = function(s)
{
 var errorLength = 0;
 var tmpLength = 1;
 var i = 0;
 for(i=1;i<s.length;i++)
 {
  if(!isNaN(s.substr(i,1)) && !isNaN(s.substr(i-1,1)))
  {
      if(s.substr(i,1) == s.substr(i-1,1))
      {
       tmpLength++; 
      }
      else
      {
       tmpLength = 1;
      }
      if(tmpLength > errorLength)
      {
       errorLength = tmpLength;
      }
  }
 }
 if(errorLength>=(s.length/2))
 {
  return false;
 }
 else
 {
  return true;
 }
}
PasswordStrength.prototype.increasePwd = function(s)
{
 var errorLength = 0;
 var tmpLength = 1;
 var i = 0;
 for(i=1;i<s.length;i++)
 {
  if(!isNaN(s.substr(i,1)) && !isNaN(s.substr(i-1,1)))
  {
   if(Number(s.substr(i,1)) == Number(s.substr(i-1,1)) + 1)
   {
    tmpLength++; 
   }
   else
   {
    tmpLength = 1;
   }
   if(tmpLength > errorLength)
   {
    errorLength = tmpLength;
   }
  }
 }
 if(errorLength>=(s.length/2))
 {
  return false;
 }
 else
 {
  return true;
 }
}
PasswordStrength.prototype.descendingPwd = function(s)
{
 var errorLength = 0;
 var tmpLength = 1;
 var i = 0;
 for(i=1;i<s.length;i++)
 {
  if(!isNaN(s.substr(i,1)) && !isNaN(s.substr(i-1,1)))
  {
   if(Number(s.substr(i,1)) == Number(s.substr(i-1,1)) - 1)
   {
    tmpLength++; 
   }
   else
   {
    tmpLength = 1;
   }
   if(tmpLength > errorLength)
   {
    errorLength = tmpLength;
   }
  }
 }
 if(errorLength>=(s.length/2))
 {
  return false;
 }
 else
 {
  return true;
 }
}

原创粉丝点击