개발/js·jquery

사업자번호 유효성/폐업여부 확인 (자바스크립트, 공공데이터포털 API)

반응형

 

1. 자바스크립트로 확인하기 (단순 유효성 검사)

 

사업자 등록번호는 123-45-67890 이런식으로 10 자리 구조이다. 이때 각 구성 요소의 의미는 아래와 같다.

  1. 123 (3자리): 국세청 / 세무서별 코드
  2. 45 (2자리) : 개인 법인 구분코드
  3. 6789(마지막4자리) : 과세/면세/법인 사업자 등록/지정일자 일련번호
  4. 0(마지막 1자리) : 검증번호

여기서 마지막 1자리로 유효한 사업자 등록번호인지 확인이 가능하다.

 

예를 들어 사업자번호가 123-45-67891 인 경우, 

 

1. 마지막 자리 1을 제외한 사업자번호 앞 9자리 인증키 9자리의 각 자리수를 각각 곱하여 전부 더해준다.

(인증키값 = 1 3 7 1 3 7 1 3 5)

 

 S = (1 * 1) + (2 * 3) + (3 * 7) + (4 * 1) + (5 * 3) ...  + (9 * 5)

2. 사업자번호 뒤에서 2번째자리와 인증키 마지막 값을 곱하고 10으로 나눈 후 위의 합과 추가로 더해줍니다.

    S += 9 * 5 / 10 (소수점은 제거)

 

3. 합계를 10으로 나머지 연산을 합니다.

   S % 10 = 9

4. 10에서 나머지 연산의 값을 빼줍니다.

   10 - 9 = 1

5. 사업자번호 마지막자리와 마지막 처리한값이 같으면 사업자번호

   1 = 1 사업자번호 O

 

 

아무튼 이런식의 복잡한 과정을 거쳐 유효한 사업자번호인지 구분할 수가 있는데, 이 과정을 자바스크립트 코드로 정리하면 아래와 같다.

function checkCorporateRegiNumber(number){
	var numberMap = number.replace(/-/gi, '').split('').map(function (d){
		return parseInt(d, 10);
	});
	
	if(numberMap.length == 10){
		var keyArr = [1, 3, 7, 1, 3, 7, 1, 3, 5];
		var chk = 0;
		
		keyArr.forEach(function(d, i){
			chk += d * numberMap[i];
		});
		
		chk += parseInt((keyArr[8] * numberMap[8])/ 10, 10);
		console.log(chk);
		return Math.floor(numberMap[9]) === ( (10 - (chk % 10) ) % 10);
	}
	
	return false;
}

 

 

이 방법으로는 사업자번호 숫자 자체의 유효성은 검사할 수 있지만 사업자등록 후, 휴업/폐업한 상태를 구분하지는 못한다.

사업자회원을 가입 받는 경우 이미 폐업한 사업자번호로 가입한다던지, 가입 후 폐업한 사업장이라던지 등 관리가 필요하게 되어 방법을 찾아보던중, 공공데이터포털에서 제공하는 API가 있다는 것을 알게 되었다.

 

국세청에서 개방한 사업자등록정보에 대한 상태조회 API를 활용하여 유효성 검사가 가능하다.

 

 

 

2. 공공데이터포털 API 활용하기 (휴/폐업 여부 조회 가능)

 

아래 링크에서 [활용신청] 클릭 후 (로그인 필요), 키값을 받은 뒤 사용이 가능하다.

https://www.data.go.kr/data/15081808/openapi.do

 

국세청_사업자등록정보 진위확인 및 상태조회 서비스

국세청에서 제공하는 사업자등록정보 진위확인 및 사업자등록 상태조회 API 서비스입니다.

www.data.go.kr

 

 

사업자번호상태 조회 샘플 코드

var data = {
    "b_no": ["xxxxxxx"] // 사업자번호 "xxxxxxx" 로 조회 시,
   }; 
   
$.ajax({
  url: "https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=xxxxxx",  // serviceKey 값을 xxxxxx에 입력
  type: "POST",
  data: JSON.stringify(data), // json 을 string으로 변환하여 전송
  dataType: "JSON",
  contentType: "application/json",
  accept: "application/json",
  success: function(result) {
      console.log(result);
  },
  error: function(result) {
      console.log(result.responseText); //responseText의 에러메세지 확인
  }
});

* 주의할 점은 1회 호출 시 최대 100개까지 조회가 가능하고, 100개 초과 시에는 에러가 발생한다.

 

 

위의 Ajax 코드를 활용하여 상태 조회를 하면 계속 사업자인지, 휴업자인지, 폐업자인지 알 수 있다.
b_stt 값이 01이면 계속사업자, 02는 휴업자, 03은 폐업자

 

 

부가가치세 일반과세자인지, 간이과세지인지 등의 정보도 알수 있어서 웹/앱개발 시 유용하게 사용이 가능하다.

 

 

나의 경우에는 회원가입 시에 두가지를 체크해야했다.

1) 이미 가입한 사업자인지 중복조회 (홈페이지 DB와 비교) 후
2) 국세청 데이터에서 계속 사업자인지


사업자등록증을 하이픈을 기준으로 reg1, reg2, reg3 필드에 각각 입력 받은 뒤, 마지막 칸에 5자리 숫자를 모두 입력하면 자동으로 유효성 검사가 되도록 하였다. 

$( '#reg3' ).keyup (function () {
            var charLimit = $(this).attr("maxlength");

            var reg1 = $("#reg1").val();
            var reg2 = $("#reg2").val();
            var reg3 = $("#reg3").val();

            var bs_num = reg1 + "" + reg2 + "" + reg3;

            if (this.value.length == "5") {

                    check = {}

                    new Promise( (succ, fail)=>{
                        var data = { "b_no": [""+bs_num+""] }; 

                        $.ajax({
                        url: "https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey={KEY VALUE}",  // serviceKey 값을 xxxxxx에 입력
                        type: "POST",
                        data: JSON.stringify(data), 
                        dataType: "JSON",
                        contentType: "application/json",
                        accept: "application/json",
                        success: function(result) {

                            check.code = result.data[0].b_stt_cd;
                            check.b_no = result.data[0].b_no;
                            succ(result);

                        },
                        fail: function(result) {
                            fail(error);                                    
                        }
                    });


                    }).then((arg) =>{   

                        $.ajax({
                            url: '/bbs/ajax.bsnum_check.php',
                            type: 'post',
                            data: { bs_num: bs_num },
                            success: function(result) {

                                $("#bs_result").css("display","block");

                                     if(result > 0) {

                                        if(ori = bs_num) {
                                        $("#bs_result").val("기존에 등록하신 사업자번호와 동일합니다.");
                                        $("#bs_result").css("color", "#999");

                                        } else {
                                        $("#bs_result").val("이미 가입한 사업자번호입니다.");
                                        $("#bs_result").css("color", "red");
                                        }

                                    } else {
                                        if(check.code == "01") {
                                            $("#bs_result").val("정상적인 사업자번호입니다.");
                                            $("#bs_result").css("color", "green");

                                        } else if(check.code == "02" || check.code == "03") {
                                            $("#bs_result").val("휴/폐업한 사업자번호입니다.");
                                            $("#bs_result").css("color", "red");
                                            
                                        } else {
                                            $("#bs_result").val("등록되지 않은 사업자번호입니다.");
                                            $("#bs_result").css("color", "red");
                                        }  
                                    }  

                            }                                              
                        });

                    }); //then end


            }

    });

* ajax여러번 사용하는 방법은 https://hongpage.kr/62 참고

 

 

 

 

반응형