1. 자바스크립트로 확인하기 (단순 유효성 검사)
사업자 등록번호는 123-45-67890 이런식으로 10 자리 구조이다. 이때 각 구성 요소의 의미는 아래와 같다.
|
여기서 마지막 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
사업자번호상태 조회 샘플 코드
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 참고
'개발 > js·jquery' 카테고리의 다른 글
jQuery 오류 - The page at '<URL>' was loaded over HTTPS, but requested an insecure script '<URL>' (2) | 2023.05.04 |
---|---|
[jQuery] Uncaught TypeError: $(...).sortable is not a function 오류 해결 (2) | 2023.04.27 |
[jQuery] Swiper Options 자주 사용하는 옵션 (2) | 2023.04.27 |
[jQuery] 스크립트로 배경 이미지 변경하기 (background-image) (2) | 2023.02.22 |
[오류] Swiper 오류 해결 Uncaught TypeError: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'. (2) | 2023.02.08 |
[jQuery] 모바일/PC 디바이스 구분하여 스크립트 다르게 보여주기 (2) | 2022.12.07 |
Swiper 슬라이더 익스플로러에서 작동 안될 때 해결 방법 (2) | 2022.10.25 |
jquery | .not() 특정 선택자만 제외하기 (2) | 2022.10.18 |