반응형
새로울것도 없이 구글링만으로 손쉽게 찾을 수 있는 검증 로직입니다.
그럼에도 불구하고 포스팅을 하는 이유는 무분별하게 검증되지 않은 로직들이 섞여 올라와있기 때문입니다.
본인 역시 올라와있는 검증 로직을 그대로 사용했다가 낭패를 겪었습니다ㅠ
제가 참고했던 로직은 이렇습니다...
예를들어 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;
}
}
앞으로는 구글링한 정보를 무조건 수용하지 않고, 꼭 테스트를 해봐야겠습니다.
반응형
'개발 > JAVA' 카테고리의 다른 글
[자바웹개발워크북] 10-1. AWS 환경구축 (0) | 2023.03.03 |
---|---|
[자바웹개발워크북] 9. API서버와 JWT (0) | 2023.02.16 |
[자바웹개발워크북] 8-1. 소셜 로그인 (0) | 2023.02.15 |
[자바웹개발워크북] 8. 스프링시큐리티 (0) | 2023.02.13 |
[자바웹개발워크북] 7. 파일업로드 처리 (0) | 2023.02.09 |