[FE/JS] 사업자번호 유효성체크

    728x90
    반응형

    2021.04.08

    15일차

     

    입사 32일차.

    회사를 상대로 하는 프로젝트에는 사업자번호, 법인번호, 주민등록번호의 유효성을 체크하는 자바스크립트가 있다.

    처음엔 NICE 같은 곳에서 API를 받아 비교하는 방법으로 진행하는 줄 알았으나, 실제로는 입력한 번호가 유효한지 체크하는 알고리즘이 있었다.

     

    이미, 인터넷에 유효성검사에 관한 코드들이 많기 때문에, 최대한 중복되지 않는 직접 만든 코드를 작성해보기로 했다. 

     

     

     

    1. 사업자번호 유효성체크

      ① 출처 : Hello World! (링크)

      ② 출처로 가져온 블로그에는 사업자번호 유효성체크의 알고리즘과 스크립트가 있다.

      ③ 아래의 코드는 내가 직접 작성해본 코드다.

    // strBN = 문자열 파라미터
    // 1번 방법
    function fn_chkBusinessNum1( strBN ) {  // strBN = 012-34-56789
        if ( strBN.length == 10 ) {
            let chkStep1 = 0;
            const keyArr = [1, 3, 7, 1, 3, 7, 1, 3, 5]; // 인증키(고정)

            for (int i = 0; i < strBN.length - 1; i++) {
               // 사업자번호의 9자리까지 인증키와 자릿수같은 숫자끼리 곱한 뒤, 계속 더해준다. (ex_ (0*1) + (1*3) + ...
               chkStep1 += parseInt(strBN.subString( i, i+1 ), 10) * keyArr[ i ];
            }
            // 9번째 자리의 숫자에 0.5를 곱한 뒤, 다시 더해준다.
            chkStep1 += Math.floor(parseInt(strBN.substring(8, 9), 10) * 5 / 10);
        }
        // '10 - (지금까지 더한 수의 나머지) == 사업자번호의 마지막 자릿수'가 같다면 성공 

        const chkStep2 = parseInt( StrBN.substring(9, 10), 10 );
        if ( ( 10 - (chkStep1 % 10) ) != chkStep2 ) {
            alert("사업자번호가 유효하지 않습니다.");
            return false;
        }
    }

    // 2번 방법
    function fn_chkBusinessNum2( strBN ) {  // 012-34-56789
        if ( strBN.length != 10 ) {
            alert("10자리를 입력해주세요.");
            return false;
        }

        let chkStep1 = 0;
        chkStep1 += parseInt(strBN.substring(0, 1), 10);
        chkStep1 += parseInt(strBN.substring(1, 2), 10) * 3 % 10;
        chkStep1 += parseInt(strBN.substring(2, 3), 10) * 7 % 10;
        chkStep1 += parseInt(strBN.substring(3, 4), 10) * 1 % 10;
        chkStep1 += parseInt(strBN.substring(4, 5), 10) * 3 % 10;
        chkStep1 += parseInt(strBN.substring(5, 6), 10) * 7 % 10;
        chkStep1 += parseInt(strBN.substring(6, 7), 10) * 1 % 10;
        chkStep1 += parseInt(strBN.substring(7, 8), 10) * 3 % 10;
        chkStep1 += parseInt(strBN.substring(8, 9), 10) * 5 % 10;
        chkStep1 += Math.floor(parseInt(strBN.substring(8, 9), 10) * 5 / 10);
        chkStep1 += parseInt(strBN.substring(9, 10), 10);

        if ( chkStep1 % 10 != 0 ) {
            alert("사업자번호가 유효하지 않습니다.");
            return false;
        }
    }

     

    728x90
    반응형

    댓글