2010년 4월 20일 화요일

Javascript - 비밀번호 보안등급 체크

 <script language="JavaScript">
/**
 * 비밀번호 보안등급 체크
 * http://ysksoft.com
 */
function getPasswordLevel() {
    var elNewPasswd = document.getElementById('new_passwd');
    var elPasswordLevel = document.getElementById('password_level');
    var result_level = checkPassword.main(elNewPasswd.value);

    var level_color = '';
    var level_txt = '';
    switch(result_level['code']) {
        case 1:
            level_color = '#00D200';
            level_txt = '낮음';
            break;
        case 2:
            level_color = '#FF7837';
            level_txt = '보통';
            break;
        case 3:
            level_color = '#FF0000';
            level_txt = '높음';
            break;
        case 1000:
        case 2000:
        case 3000:
        case 4000:
            elPasswordLevel.innerHTML = '<font color="red">'+result_level['msg']+'</font>';
            return false;
            break;
        default:
            return false;
            break;
    }

    elPasswordLevel.innerHTML = '보안등급 : <font color="'+level_color+'" style="font-weight:bold">'+level_txt+'</font>';
}
var checkPassword = {
    aResultSecure : [],
    sPassword : '',
    sCheckRegexp1 : /^[a-zA-Z]/,
    sCheckRegexp2 : /[a-zA-Z0-9\~\!\@\$\^\*\(\)\_\+\{\}\[\]]/,
    sRegexp1 : /[a-z]/,
    sRegexp2 : /[A-Z]/,
    sRegexp3 : /[0-9]/,
    sRegexp4 : /[\~\!\@\$\^\*\(\)\_\+\{\}\[\]]/,
    main : function(sPassword) {

        this.aResultSecure['code'] = 0;
        this.aResultSecure['msg'] = false;
        this.sPassword = sPassword;
        this.sResultRegexp = this.checkRegexp();

        // 기본 검사
        if(this.checkDefaultPassword()==true) {

            // 낮은 단계 비밀번호 검사
            // 문자그룹 중에서 2가지만 조합하여 8자리~9자리
            // return 1
            this.checkPasswordLevel1();

            // 중간 단계 비밀번호 검사
            // 문자그룹 중에서 2가지만 조합하여 10자리~13자리
            // 문자그룹 중에서 영문대문자/영문소문자/숫자 조합하여 8자리 이상
            // return 2
            this.checkPasswordLevel2();

            // 높은 단계 비밀번호 검사
            // 문자그룹 중에서 2가지만 조합하여 14자리 이상
            // 문자그룹 중에서 영문대문자/영문소문자/숫자 조합하여 9자리 이상
            // 문자그룹 중에서 특수문자 포함 3가지 이상 조합하여 8자리 이상
            // return 3
            this.checkPasswordLevel3();

            if(this.aResultSecure['code'] == 0) {
                this.aResultSecure['code'] = 1000;
                this.aResultSecure['msg'] = '영문+숫자, 혹은 영문+특수문자 등 비밀번호를 조합하여 입력해 주세요.';
            }
        }
        return this.aResultSecure;
    },
    checkRegexp : function() {
        var rStr = '';
        if(this.sRegexp1.test(this.sPassword)) {
            rStr += '1';
        }
        if(this.sRegexp2.test(this.sPassword)) {
            rStr += '2';
        }
        if(this.sRegexp3.test(this.sPassword)) {
            rStr += '3';
        }
        if(this.sRegexp4.test(this.sPassword)) {
            rStr += '4';
        }
        return rStr;
    },
    checkDefaultPassword : function() {
        if(this.sCheckRegexp1.test(this.sPassword)) {
            var sTemp = '';
            for(var x=0; x<this.sPassword.length; x++) {
                sTemp = this.sPassword.substr((x*1),1);
                if(!this.sCheckRegexp2.test(sTemp)) {
                    this.aResultSecure['code'] = 2000;
                    this.aResultSecure['msg'] = '['+sTemp+']는 사용 불가능한 특수문자입니다.';
                    return false;
                }
            }
        } else {
            this.aResultSecure['code'] = 3000;
            this.aResultSecure['msg'] = '비밀번호의 첫 글자는 영문으로 시작해야 합니다.';
            return false;
        }
        if(this.sPassword.length < 8) {
            this.aResultSecure['code'] = 4000;
            this.aResultSecure['msg'] = '비밀번호를 8자 이상 입력해 주세요.';
            return false;
        }
        return true;
    },
    checkPasswordLevel1 : function() {
        if(this.sPassword.length >= 8 && this.sPassword.length <= 9) {
            if(this.sResultRegexp.length==2) {
                this.aResultSecure['code'] = 1;
            }
        }
    },
    checkPasswordLevel2 : function() {
        if(this.sPassword.length >= 10 && this.sPassword.length <= 13) {
            if(this.sResultRegexp.length==2) {
                this.aResultSecure['code'] = 2;
            }
        }
        if(this.sPassword.length >= 8) {
            if(this.sResultRegexp=='123') {
                this.aResultSecure['code'] = 2;
            }
        }
    },
    checkPasswordLevel3 : function() {
        if(this.sPassword.length >= 14) {
            if(this.sResultRegexp.length==2) {
                this.aResultSecure['code'] = 3;
            }
        }
        if(this.sPassword.length >= 9) {
            if(this.sResultRegexp=='123') {
                this.aResultSecure['code'] = 3;
            }
        }
        if(this.sPassword.length >= 8) {
            if(this.sResultRegexp.length >= 2 && this.sResultRegexp.indexOf('4') > -1) {
                this.aResultSecure['code'] = 3;
            }
        }
    }
}
</script>

<input type="password" id="new_passwd" name="new_passwd" onkeyup="getPasswordLevel()" maxlength="16" size="30" />
<br>
<div id="password_level"></div>

0 개의 댓글:

댓글 쓰기