사업자등록번호 검증 규칙은 회원가입, 견적 문의, 세금계산서 발행, 관리자 시스템 개발 시 자주 사용됩니다.
많은 개발자가 단순히 숫자 10자리만 확인하는 경우가 있지만, 사업자등록번호는 별도의 검증 알고리즘이 존재합니다.
이번 글에서는 사업자등록번호 검증 원리와 실제 개발에 사용할 수 있는 JavaScript 함수를 함께 알아보겠습니다.
사업자등록번호는 왜 검증해야 할까?
사업자등록번호는 총 10자리 숫자로 구성됩니다.
예를 들어 아래와 같은 형태입니다.
123-45-67890
하지만 형식만 맞는다고 해서 모두 정상적인 번호는 아닙니다.
실제로 존재하지 않는 번호를 입력해도 형식 검사는 통과할 수 있기 때문에 추가적인 검증이 필요합니다.
저도 기업 회원가입 기능을 개발할 때 단순 정규식만 사용했다가 잘못된 사업자등록번호가 다수 등록된 경험이 있었습니다.
이후 검증 알고리즘을 적용하니 잘못된 데이터가 크게 줄어들었습니다.
사업자등록번호의 기본 구조
사업자등록번호는 다음과 같은 형식을 가집니다.
000-00-00000
총 10자리 숫자로 구성됩니다.
검증 시에는 하이픈(-)을 제거한 숫자만 사용합니다.
예시
123-45-67890
↓
1234567890
사업자등록번호 검증 원리는 무엇일까?
사업자등록번호는 마지막 한 자리가 검증번호(Check Digit) 역할을 합니다.
앞의 9자리 숫자를 특정 규칙으로 계산하여 마지막 숫자가 맞는지 확인하는 방식입니다.
검증 과정은 다음과 같습니다.
1. 숫자를 배열로 분리
1234567890
↓
[1,2,3,4,5,6,7,8,9,0]
2. 가중치를 곱한다
가중치 배열은 다음과 같습니다.
[1, 3, 7, 1, 3, 7, 1, 3, 5]
각 자리 숫자와 순서대로 곱합니다.
| 자리 | 숫자 | 가중치 | 결과 |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 2 | 2 | 3 | 6 |
| 3 | 3 | 7 | 21 |
| 4 | 4 | 1 | 4 |
| 5 | 5 | 3 | 15 |
| 6 | 6 | 7 | 42 |
| 7 | 7 | 1 | 7 |
| 8 | 8 | 3 | 24 |
| 9 | 9 | 5 | 45 |
3. 9번째 자리 특별 계산
마지막 가중치가 5인 항목은 조금 다르게 계산합니다.
9 × 5 = 45
45의 십의 자리인 4를 추가로 더합니다.
4 + 5 = 9
정확히는 아래와 같이 계산합니다.
Math.floor((digits[8] * 5) / 10)
4. 합계를 구한다
곱한 값을 모두 더합니다.
그리고 9번째 자리의 십의 자리 값도 추가합니다.
5. 검증번호 계산
다음 공식을 사용합니다.
(10 - (합계 % 10)) % 10
계산된 값이 사업자등록번호 마지막 자리와 같으면 정상입니다.
JavaScript 사업자등록번호 검증 함수
실무에서 바로 사용할 수 있는 함수입니다.
function validateBizNumber(num) {
// 숫자만 추출
num = num.replace(/[^0-9]/g, "");
if (num.length !== 10) return false;
const digits = num.split("").map(Number);
const multipliers = [1, 3, 7, 1, 3, 7, 1, 3, 5];
let sum = 0;
for (let i = 0; i < 9; i++) {
sum += digits[i] * multipliers[i];
}
// 9번째 자리의 십의 자리 추가
sum += Math.floor((digits[8] * 5) / 10);
const checkDigit = (10 - (sum % 10)) % 10;
return digits[9] === checkDigit;
}
실제 사용 예제
console.log(validateBizNumber("220-81-62517"));
console.log(validateBizNumber("123-45-67890"));
결과
true
false
회원가입 폼에서는 다음과 같이 활용할 수 있습니다.
const bizNumber = document.querySelector("#biz_number").value;
if (!validateBizNumber(bizNumber)) {
alert("올바른 사업자등록번호를 입력하세요.");
return false;
}
PHP 버전 예제
PHP에서도 동일한 방식으로 구현할 수 있습니다.
function validateBizNumber($num)
{
$num = preg_replace("/[^0-9]/", "", $num);
if (strlen($num) != 10) {
return false;
}
$multiplier = array(1, 3, 7, 1, 3, 7, 1, 3, 5);
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += $num[$i] * $multiplier[$i];
}
$sum += floor(($num[8] * 5) / 10);
$checkDigit = (10 - ($sum % 10)) % 10;
return ((int)$num[9] === $checkDigit);
}
개발 시 주의할 점
사업자등록번호 검증 알고리즘을 통과한다고 해서 실제 등록된 사업자인 것은 아닙니다.
알고리즘 검증은 형식 검증에 가까운 개념입니다.
실제 사업자 여부까지 확인하려면 국세청의 사업자등록 상태 조회 서비스나 API를 이용해야 합니다.
즉,
- 형식 검증 → 현재 글의 알고리즘 사용
- 실제 사업자 확인 → 국세청 조회 서비스 사용
이렇게 구분해서 생각하는 것이 좋습니다.
마무리
사업자등록번호는 단순히 10자리 숫자인 것처럼 보이지만 내부적으로 검증용 체크 디지트(Check Digit) 알고리즘을 사용합니다.
회원가입, 세금계산서, 기업 회원 관리 기능을 개발한다면 정규식만 사용하는 것보다 알고리즘 검증까지 적용하는 것이 데이터 품질을 높이는 데 도움이 됩니다.
실제로 저도 기업 회원 시스템을 개발할 때 해당 검증을 적용한 이후 잘못 입력되는 사업자등록번호가 크게 줄어드는 효과를 확인할 수 있었습니다.