하은양 믿음군 효실맘 호홍홍집s

비밀번호 체크하기 본문

가벼운 배움/javascript

비밀번호 체크하기

호홍홍집 2017. 2. 10. 18:09

<div>
비밀번호 생성규칙

① 최소 8자 ~ 최대 20자 이내로 입력합니다.
② 반드시 영문, 숫자, 특수문자가 각 1자리 이상 포함되어야 합니다.
③ 특수문자 중 <, >, (, ), #, ', /, | 는 사용할수 없습니다.
④ 3자리 이상 연속되는 숫자 또는 문자열은 사용할 수 없습니다.
   (예:123, 321, 012, abc, cba)
⑤ 3자리 이상 동일한 숫자 또는 문자열은 사용할 수 없습니다.
   (예:000, 111, 222, ,aaa, bbb)
⑥ 아래와 같은 문자는 사용할 수 없습니다.
   (love, happy, qwer, asdf, zxcv, test, gpin, ipin)
⑦ 아이디와 연속한 3자리 이상 일치하는 비밀번호는 사용할 수 없습니다. 
</div>

<script>
function submitForm(){
 var srt = pwInputValueCheck();
 var pattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i;
 document.frm01.usrId.value = "hogildong";

 if(document.frm01.pwNow.value == ""){
  alert("현재 비밀번호를 입력해 주세요.");
  document.frm01.pwNow.focus();
  return;
 }

 if(document.frm01.pw.value == "" && document.frm01.pw2.value == ""){
 
   }else{
  if(document.frm01.pw.value == ""){
   alert("변경 비밀번호를 입력해 주세요.");
   document.frm01.pw.focus();
   return;
  }else if(document.frm01.pw2.value == ""){
   alert("변경 비밀번호 확인을 입력해 주세요.");
   document.frm01.pw2.focus();
   return;
  }else if(document.frm01.pw.value.length < 8 || document.frm01.pw.value.length > 20){
     alert('비밀번호는 8자 이상 20자 이내로 입력하여 주십시오')
         document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pw.focus();
   return;
  }else if(pwcheck()){
   alert("비밀번호에 허용되지 않는 특수문자(<, >, (, ), #, ', /, |)가 있습니다.");
   document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pw.focus();
   return;
  }else if(checkPwdEnd()){
   alert('비밀번호는 영문, 숫자, 특수문자의 조합으로 구성되어야 하며\n최소 1자리 이상의 특수문자가 포함되어야 합니다')
   document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pw.focus();
   return;
  }else if(pwContinue()){
   alert("비밀번호에 3자리 이상 연속된 문자(예:abc)는 사용할 수 없습니다.");
   document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pw.focus();
   return;
  }else if(pwSame()){
   alert("비밀번호에 3자리 이상 연속된 동일한 문자(예:aaa)는 사용할 수 없습니다.");
   document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pw.focus();
   return;
  }else if(idValuePw()){
   alert("비밀번호가 아이디와 동일하거나 3자리 이상 일치할 경우 사용할 수 없습니다.");
   document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pw.focus();
   return;
  }else if(srt != null){
   alert("비밀번호에 \"" + srt + "\" 라는 문자는 사용할 수 없습니다.");
   document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pw.focus();
   return;
  }else if(document.frm01.pw.value == "hogildong"){
         alert('비밀번호는 아이디와 동일할 수 없습니다')
   document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pw.focus();
   return;
  }else if(document.frm01.pw.value != document.frm01.pw2.value){
         alert('변경 비밀번호와\n변경 비밀번호 확인이\n맞지않습니다')
   document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pw.focus();
   return;
  }else if(document.frm01.pw.value == document.frm01.pwNow.value){
         alert('현재 비밀번호와 변경 비밀번호가 동일합니다.')
   document.frm01.pwNow.value = "";
   document.frm01.pw.value = "";
   document.frm01.pw2.value = "";
   document.frm01.pwNow.focus();
   return;
  }
 }

}

// 비밀번호에 허용되지 않는 특수문자(<, >, (, ), #, ', /, |)가 있습니다.
function pwcheck(){
 digits = "\`~!@$%^&*-=\\_+,.?;:\"[]{}0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 j = 0;
 valpw = document.frm01.pw.value;
 for(i=0; i<valpw.length; i++){
  if(digits.indexOf(valpw.charAt(i)) < 0){
   j = j+1;
  }
 }
 if(j > 0){
  return true;
 }
 return false;
}

// 비밀번호는 영문, 숫자, 특수문자의 조합으로 구성되어야 하며\n최소 1자리 이상의 특수문자가 포함되어야 합니다
function checkPwdEnd(){
 var flag = false;
 var intCount = 0;
 var charCount = 0;
 var varcharCount = 0;
 intCount = IntCount(document.frm01.pw.value);
 charCount = CharCount(document.frm01.pw.value);
 varcharCount = VarCharCount(document.frm01.pw.value);
 if((intCount == 0 || charCount == 0 || varcharCount == 0)){
  flag = true;
 }
 return flag;
}

function IntCount(aInputBox) {  // aInputBox에 있는 숫자의 갯수 return
  var comp = "1234567890";
  var aInputBoxValue = aInputBox;
  var len=aInputBoxValue.length;
  var count = 0;
  if(len > 0) {
      for(var i=0;i<len;i++) {
          if(comp.indexOf(aInputBoxValue.substring(i,i+1)) != -1) {
              count++;
          }
      }       
  }
  return count;
}

function CharCount(aInputBox) {  // aInputBox에 있는 문자의 갯수 return
   var comp = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
   var aInputBoxValue = aInputBox;
   var len=aInputBoxValue.length;
   var count = 0;
   if(len > 0) {
       for(var i=0;i<len;i++) {
           if(comp.indexOf(aInputBoxValue.substring(i,i+1)) != -1) {
               count++;
           }
       }       
   }
   return count;
}

function VarCharCount(aInputBox) {  // aInputBox에 있는 특수문자의 갯수 return
   var comp = "\`~!@#$%^&*-_+=\\,./?:;\"{[}]";
   var aInputBoxValue = aInputBox;
   var len = aInputBoxValue.length;
   var count = 0;
   if(len > 0){
       for(var i=0; i<len; i++) {
           if(comp.indexOf(aInputBoxValue.substring(i,i+1)) != -1) {
               count++;
           }
       }       
   }
   return count;
}

// 비밀번호에 3자리 이상 연속된 문자(예:abc)는 사용할 수 없습니다.
function pwContinue(){   //연속된 문자, 숫자 체크(3자리)
 var cnt = 0;
 var cnt2 = 0;
 var tmp = "";
 var tmp2 = "";
 var tmp3 = "";
 validpw = document.frm01.pw.value;
 for(i=0; i<validpw.length; i++){
  tmp = validpw.charAt(i);
  tmp2 = validpw.charAt(i+1);
  tmp3 = validpw.charAt(i+2);
  
  if(tmp.charCodeAt(0) - tmp2.charCodeAt(0) == 1 && tmp2.charCodeAt(0) - tmp3.charCodeAt(0) == 1){
   cnt = cnt + 1;
  }
  if(tmp.charCodeAt(0) - tmp2.charCodeAt(0) == -1 && tmp2.charCodeAt(0) - tmp3.charCodeAt(0) == -1){
   cnt2 = cnt2 + 1;
  }
 }
 if(cnt > 0 || cnt2 > 0){
  return true;
 }else{
  return false;
 }
}

// 비밀번호에 3자리 이상 연속된 동일한 문자(예:aaa)는 사용할 수 없습니다.
function pwSame(){   //동일 문자, 숫자 체크(3자리)
 var tmp = "";
 var cnt = 0;
 validpw = document.frm01.pw.value;
 for(i=0; i<validpw.length; i++){
  tmp = validpw.charAt(i);
  if(tmp == validpw.charAt(i+1) && tmp == validpw.charAt(i+2)){
   cnt = cnt + 1;
  }
 }
 if(cnt > 0){
  return true;
 }else{
  return false;
 }
}

// 비밀번호가 아이디와 동일하거나 3자리 이상 일치할 경우 사용할 수 없습니다.
function idValuePw(){
 validid = document.frm01.usrId.value;
 validpw = document.frm01.pw.value;
 var tmp = "";
 var cnt = 0;
 for(i=0; i<validid.length-2; i++){
  tmp = validid.charAt(i) + validid.charAt(i+1) + validid.charAt(i+2);
  if(validpw.indexOf(tmp) > -1){
   cnt = cnt + 1;
  }
 }
 if(cnt > 0){
  return true;
 }else{
  return false;
 }
}

// "비밀번호에 \"" + srt + "\" 라는 문자는 사용할 수 없습니다."
function pwInputValueCheck(){  //특정문자 체크
  var InputValue = ["love", "happy", "qwer", "asdf", "zxcv", "test", "gpin" , "ipin"];
  validpw = document.frm01.pw.value;
  for(i=0; i<InputValue.length; i++){
   if(validpw.indexOf(InputValue[i]) >= 0){
    return InputValue[i];
   }
  }
  return null;
 }

</script>