프로그래밍/Javascript

JavaScript - 비밀번호 체크 로직

개발계발게발 2021. 9. 17. 20:54
반응형

<html>

<head>

<script type="text/javascript">

 

     var pw_passed = true;  // 추후 벨리데이션 처리시에 해당 인자값 확인을 위해

 

 

 

    function fn_pw_check() {

        var pw = document.getElementById("txtPassword1").value; //비밀번호

        var pw2 = document.getElementById("txtPassword2").value; // 확인 비밀번호

        var id = document.getElementById("txtId").value; // 아이디

 

 

 

        pw_passed = true;

 

 

        var pattern1 = /[0-9]/;

        var pattern2 = /[a-zA-Z]/;

        var pattern3 = /[~!@\#$%<>^&*]/;     // 원하는 특수문자 추가 제거

        var pw_msg = "";

 

 

 

        if(id.length == 0) {

               alert("아이디를 입력해주세요");

               return false;

 

              

         } else {

                //필요에따라 아이디 벨리데이션

         }

 

 

 

        if(pw.length == 0) {

               alert("비밀번호를 입력해주세요");

               return false;

 

              

         } else {

                if( pw  !=  pw2) {

                      alert("비밀번호가 일치하지 않습니다.");

                      return false;

 

                     

                 }

         }

 

 

 

       if(!pattern1.test(pw)||!pattern2.test(pw)||!pattern3.test(pw)||pw.length<8||pw.length>50){

            alert("영문+숫자+특수기호 8자리 이상으로 구성하여야 합니다.");

            return false;

 

           

        }          

 

        if(pw.indexOf(id) > -1) {

            alert("비밀번호는 ID를 포함할 수 없습니다.");

            return false;

 

           

        }

 

 

 

        var SamePass_0 = 0; //동일문자 카운트

        var SamePass_1 = 0; //연속성(+) 카운드

        var SamePass_2 = 0; //연속성(-) 카운드

 

 

 

        for(var i=0; i < pw.length; i++) {

             var chr_pass_0;

             var chr_pass_1;

             var chr_pass_2;

     

             if(i >= 2) {

                 chr_pass_0 = pw.charCodeAt(i-2);

                 chr_pass_1 = pw.charCodeAt(i-1);

                 chr_pass_2 = pw.charCodeAt(i);

                 

                  //동일문자 카운트

                 if((chr_pass_0 == chr_pass_1) && (chr_pass_1 == chr_pass_2)) {

                    SamePass_0++;

                  } 

                  else {

                   SamePass_0 = 0;

                   }

 

                  //연속성(+) 카운드

                 if(chr_pass_0 - chr_pass_1 == 1 && chr_pass_1 - chr_pass_2 == 1) {

                     SamePass_1++;

                  }

                  else {

                   SamePass_1 = 0;

                  }

          

                  //연속성(-) 카운드

                 if(chr_pass_0 - chr_pass_1 == -1 && chr_pass_1 - chr_pass_2 == -1) {

                     SamePass_2++;

                  } 

                  else {

                   SamePass_2 = 0;

                  }  

             }     

              

            if(SamePass_0 > 0) {

               alert("동일문자를 3자 이상 연속 입력할 수 없습니다.");

               pw_passed=false;

 

              

             }

 

 

 

            if(SamePass_1 > 0 || SamePass_2 > 0 ) {

               alert("영문, 숫자는 3자 이상 연속 입력할 수 없습니다.");

               pw_passed=false;

 

              

             } 

             

             if(!pw_passed) {             

                  return false;

                  break;

            }

        }

        return true;

    }

</script>

<meta charset="UTF-8">

</head>

<body>

   아이디 :  <input type="text" id="txtId" /><br/>

   비밀번호 : <input type="password" id="txtPassword1" /><br/>

   비밀번호확인 : <input type="password" id="txtPassword2" /><br/>

   <a href="#" onclick="fn_pw_check()">확인</a>

</body>

</html>

 

출처

https://blog.naver.com/lmg2738/220046845773

 

[비밀번호 작성규칙] 영문+숫자+특수기호 8자리 이상 및 ID 포함금지, 3자리 이상 연속하는 영문,

문화부 기준의 비밀번호 작성규칙에 적용하는 체크로직입니다. 외부에 돌아다니는 소스를 조금 수정하여 정...

blog.naver.com

 

반응형