개발/JAVA

사업자 등록번호 검증 로직

독코더 2023. 7. 20. 14:42
반응형

새로울것도 없이 구글링만으로 손쉽게 찾을 수 있는 검증 로직입니다.

 

그럼에도 불구하고 포스팅을 하는 이유는 무분별하게 검증되지 않은 로직들이 섞여 올라와있기 때문입니다.

 

본인 역시 올라와있는 검증 로직을 그대로 사용했다가 낭패를 겪었습니다ㅠ

 

제가 참고했던 로직은 이렇습니다...

예를들어 5 0 5 8 1 2 4 0 2 0라는 사업자등록번호가 있다고 한다면,
1. 각각의 자리에 1 3 7 1 3 7 1 3 5를 곱한 합을 구합니다.
5 0 5 8 1 2 4 0 2 0
1 3 7 1 3 7 1 3 5

sum = (5*1) + (0*3) + (5*7) + (8*1) + (1*3) + (2*7) + (4*1) + (0*3) + (2*5) =  79

2. 마지막에서 두번째 숫자에 5를 곱하고 10으로 나누어 나온 몫을 더해줍니다.
(2*5) / 10 = 1
sum = 79 + 1 = 80

3. sum을 10으로 나누어 나머지만 취해줍니다.
80 / 10 의 나머지는 0

4. 매직키인 10에서 방금 나온 나머지를 빼면
10 - 0 = 10

5. 이 숫자가 사업자등록번호 마지막 자리의 숫자와 일치하면 대한민국 사업자입니다.
0 = 10 (X)

로직에 따르면 이는 올바른 사업자가 아닙니다.

 

하지만 위의 로직대로라면 마지막 번호가 0으로 끝나는 사업자들은 전부 올바른 사업자가 될 수 없습니다.

 

여기서 구한 값을 한번더 10으로 나누어 나머지값을 마지막 번호와 비교 해주어야 확실한 비교를 할 수 있습니다.

 

이를 이용해 로직을 재구성하면 다음과 같습니다.

public static boolean chkBizID(String bizID) throws Exception {
		
    int sum = 0;

    // 1. 각각의 자리에 1 3 7 1 3 7 1 3 5 를 곱한 합을 구한다.
    String chkNo = "137137135";
    for (int i = 0; i < chkNo.length(); i++) {
        sum += (bizID.charAt(i)-'0') * (chkNo.charAt(i)-'0');
    }

    // 2. 마지막에서 두번째 숫자에 5를 곱하고 10으로 나누어 나온 몫을 더한다.
    sum += ((bizID.charAt(8)-'0') * 5)/10;

    // 5. 매직키인 10로 나눈 나머지를 10에서 빼주고, 다시 10으로 나눈 나머지값이 사업자등록번호 마지막 자리의 숫자와 일치하면 대한민국 사업자이다. 
    if(bizID.charAt(9)-'0' == (10-sum%10)%10) {
        return true;
    }else {
        return false;
    }
		
}

 

앞으로는 구글링한 정보를 무조건 수용하지 않고, 꼭 테스트를 해봐야겠습니다.

반응형