Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

방카@Dev

[Javascript] 회원가입 유효성 검사 sample 본문

FrontEnd/Javascript

[Javascript] 회원가입 유효성 검사 sample

방카킴 2024. 5. 24. 10:24
// 모든 함수 호출
var a = 0;
function allFun() {
    a = id();
    a += pw();
    a +=pwCheck();
    a +=mail();
    a +=name();
    a +=secretNum();
    birth();
    a +=interest();
    a +=introduce();

    console.log(a);
    if(a == 8){
        let regiform = document.getElementById("regiform");
    	regiform.submit(); // subject는 제목을 정의하기 위한 구문으로 필수 아님
    }
}

// 회원기본정보
function id() {
    var id = document.getElementById("id");

    if (id.value.length < 4 || id.value.length > 12) {
        alert("4~12자로 입력해주세요");
        id.value = "";
        id.focus();
        return 0;
    }

    // 아스키코드 0-9 : 48-57 / A-Z : 65-90 / a-z : 97-122
    for (var i = 0; i < id.value.length; i++) {
        var idAscii = id.value.charCodeAt(i); // 비밀번호의 i번째자리 아스키코드를 뽑아내는 구문
        if (!(idAscii >= 48 && idAscii <= 57 ||
            idAscii >= 65 && idAscii <= 90 ||
            idAscii >= 97 && idAscii <= 122)) {
            alert("영문 대소문자와 숫자만 입력가능합니다.");
            return 0;
            break;
        }
    } return 1;
}

function pw() {
    var pw = document.getElementById("password");

    if (pw.value.length < 4 || pw.value.length > 12) {
        alert("4~12자로 입력해주세요");
        pw.value = "";
        pw.focus();
        return 0;
    }
    else if (pw.value == id.value) {
        alert("id와 동일한 값을 입력하셨습니다.");
        pw.value = "";
        pw.focus();
        return 0;
    }

    // 아스키코드 0-9 : 48-57 / A-Z : 65-90 / a-z : 97-122
    for (var i = 0; i < pw.value.length; i++) {
        var pwAscii = pw.value.charCodeAt(i); // 비밀번호의 i번째자리 아스키코드를 뽑아내는 구문
        if (!(pwAscii >= 48 && pwAscii <= 57 ||
            pwAscii >= 65 && pwAscii <= 90 ||
            pwAscii >= 97 && pwAscii <= 122)) {
            alert("영문 대소문자와 숫자만 입력가능합니다.");
            return 0;
            break;
        }
    } return 1;
}

function pwCheck() {
    var pw = document.getElementById("password");
    var pwCheck = document.getElementById("checkPassword");

    if (pw.value != pwCheck.value) {
        alert("입력한 비밀번호와 일치하지 않습니다.");
        pw.value = "";
        pw.focus();
        return 0;
    } return 1;
}

function mail() {
    var mail = document.getElementById("email");
    var golbange = mail.value.indexOf("@"); // mail 값에 @가 포함되어있지 않으면 -1반환
    var jum = mail.value.lastIndexOf(".");

    if (mail.value == "") {
        alert("빈칸 에러");
        mail.value = "";
        mail.focus();
        return 0;
    }

    if (golbange === -1 || // "@"가 없는 경우
        jum === -1 || // "."이 없는 경우
        golbange === 0 || // "@"가 맨 앞에 있는 경우
        golbange > jum || // "."이 "@"보다 앞에 있는 경우
        jum === mail.value.length - 1) { // "."이 맨 뒤에 있는 경우
        alert("입력한 이메일 형식이 옳바르지 않습니다.");
        return 0;
    } return 1;
}

function name() {
    var name = document.getElementById("userName");

    if (name.value == "") {
        alert("빈칸 에러");
        name.value = "";
        name.focus();
        return 0;
    } return 1;
}

// 개인신상정보
function secretNum() {
    var secretNum = document.getElementById("ssn");


    if (secretNum.value.length != 13) {
        alert("주민번호는 13자리입니다.");
        secretNum.value = "";
        secretNum.focus();
        return 0;
    }

    // 주민번호 규칙
    // 12345678 * 23456789 / 9 10 11 12 * 2345 의 모든 값을 더하고 % 11한 값을 a 11-a가 13번째 자리
    var rule = parseInt(secretNum.value.charAt(0)) * 2
    rule += parseInt(secretNum.value.charAt(1)) * 3
    rule += parseInt(secretNum.value.charAt(2)) * 4
    rule += parseInt(secretNum.value.charAt(3)) * 5
    rule += parseInt(secretNum.value.charAt(4)) * 6
    rule += parseInt(secretNum.value.charAt(5)) * 7
    rule += parseInt(secretNum.value.charAt(6)) * 8
    rule += parseInt(secretNum.value.charAt(7)) * 9

    rule += parseInt(secretNum.value.charAt(8)) * 2
    rule += parseInt(secretNum.value.charAt(9)) * 3
    rule += parseInt(secretNum.value.charAt(10)) * 4
    rule += parseInt(secretNum.value.charAt(11)) * 5

    var lastNum = 11 - (rule % 11);

    // lastNum%=10;
    lastNum = lastNum % 10;

    //마지막자리
    let secretNumLast = secretNum.value.charAt(12);

    if (secretNumLast != lastNum) {
        alert("주민번호가 올바르지 않습니다.");
        return 0;
    } return 1;

}

function birth() {
    var secretNum = document.getElementById("ssn").value; // 주민번호 가져오기
    var year2 = secretNum.substring(0, 2); // 연도
    var sevenNum = secretNum.charAt(6);


    if (sevenNum == 3 || sevenNum == 4) {
        year2 = '20' + year2
    }
    else {
        year2 = '19' + year2
    }

    document.getElementById("birthYear").value = year2;

    // 월
    var month2 = secretNum.substring(2, 4);
    document.getElementById("birthMonth").value = month2;

    // 일
    var day2 = secretNum.substring(4, 6);
    document.getElementById("birthDay").value = day2;
    // console.log(day2); // 검증용 출력
}

function interest() {
    var interest = document.getElementsByName("hobbies");
    var count = 0;
    for (var i = 0; i < interest.length; i++) { // 5개의 선택지만큼 반복하며 각각 체크가 되어있는지를 확인
        if (interest[i].checked == true) { // true면 체크된 상태
            count++; // 체크된 체크박스의 갯수를 count
        }
    } if (count == 0) { // 하나도 체크되어있지 않다면
        alert("하나 이상 선택해주세요.");
        return 0;
    } return 1;
}

function introduce() {
    if (introduce.value == "") {
        alert("빈칸 에러");
        name.value = "";
        name.focus();
        return 0;
    } return 1;
}