Javascript/코드 모음

[JAVASCRIPT] 비밀번호 유효성 검사

브루트포스 2019. 12. 9. 23:16

 

 

 

 

 

 

순수 자바스크립트이며, 지속적으로 추가/확장됩니다.

 

 

 

 

기본 기능 설명 ( ES5 )

 

- 최소/최대 문자 입력 범위 ( 9~16 자리의 입력 체크 )

- 같은 숫자 연속 금지 ( 3자리를 기준으로, ex: pwd111(X), pwd11d(O) )

- 순차적 숫자 금지 ( ex : 123456 )

- 알파벳 순 문자 금지 ( ex : abcde )

 

 

실제 코드


function passwordValidator(args, opt) {
    // v1.0
    var obj = opt || {   // options의 기본 값들입니다. 
        min: 9, max: 16, conseq: 5, special: true,
        msg: '숫자와 영문자,특수문자 조합으로 9~16자리를 사용해야 합니다.',
    }

    var specialChar = opt.special ? '(?=.*[!@#$%^*+=-])' : '';
    var rules = new RegExp("^(?=.*[a-zA-Z])"+specialChar+
    "(?=.*[0-9]).{" + obj.min + "," + obj.max + "}$");
    if (!rules.test(args)) {
        console.log(opt.msg);
        return false;
    }
    if(!checkSequential(args, obj)) return false; // 필요없을 경우 주석하세요
    return true;
}

function checkSequential(s, obj) {   // 순차적 숫자, 알파벳, 동일한 숫자 체크 함수
    // Check for sequential numerical characters
    for(var i in s) 
        if (+s[+i+1] == +s[i]+1 && 
            +s[+i+2] == +s[i]+2) return false;
    // Check for sequential alphabetical characters
    for(var i in s) 
        if (String.fromCharCode(s.charCodeAt(i)+1) == s[+i+1] && 
            String.fromCharCode(s.charCodeAt(i)+2) == s[+i+2]) return false;
    // check for consecutive numbers
    var count = 0;
    for(var i = 0; i < s.length; ++i)
    {
        if(s[i] === s[i+1]) count++;
        else count = 0;
        if(count >= obj.conseq - 1) return false;
    }
    return true;
}

 

 

//사용법 

var options = {
    min:9, max:16, // 최소/최대 입력 범위 ( 9 ~ 16자리 )
    conseq:5, // 최대 연속 숫자 입력 ( ex: pwd22222 )
    special: true, // 특수문자 포함여부 (true일경우 반드시 포함하여야 함)
    msg: 'test message' // 실패할 경우의 출력 메시지 (ex : 비밀번호가 유효하지 않습니다..등 )
}

passwordValidator([String:검사할 문자열],[Object:옵션]);

 

 


*테스트 *

 

위 콘솔 로그의 각 라인 의미 : 실제 입력된 문자열 : 예상하는 리턴값 => 실제 리턴값