Computer Science/JAVA
JAVA를 이용한 주민등록번호 유효성 검사하기
신쫄이후리스
2012. 11. 12. 13:31
반응형
웹서비스 관련된 과제를 하면서 작성했던 주민등록번호 유효성 검사에 대한 메소드를 구현해 보겠다.
먼저 주민등록번호는 유효성을 검사하는 일종의 공식(?) 이 있다.
차근차근 방법을 따라가 보자.
예를들어 주민등록번호가 123456-1234567 이라고 하면 계산방법은 다음과 같다.
1. 검증코드를 제외한 나머지 값들을 미리 지정된 값에 숫자를 하나씩 하나씩 모두 곱한다.
2. 각 자리수에서 곱한 숫자들을 모두 더한다.
3. 더한 결과를 11로 나누어 나머지를 구한다. (나머지 연산 %)
4. 11에서 나머지의 결과를 빼준다.
5. 연산을 통해 얻어진 값과 위에서 구했던 검증번호가 일치하는지 검사한다.
123456-1234567 이라는 주민등록번호에서 검증번호는 7이고, 연산 결과 얻은 값은 3이 된다.
따라서 두 값은 같지 않기 때문에 유효하지 않은 주민등록번호가 된다. 만약 이 두 값이 같다면 주민등록번호는 유효한 값이 되는 것이다.
위의 계산을 JAVA 코드로 만들어 보았다.
public String checkValidation(String ssFrontNumber, String ssBackNumber) {
String ssNum;
String errMsg = "You wrote wrong number";
String validMsg = "Your number is valid";
String invalidMsg = "Your number is invalid";
int inputData[] = new int[13];
int checkData[] = {2,3,4,5,6,7,8,9,2,3,4,5};
int multData[] = new int[12];
int sum = 0;
int validChkNum = 0;
ssNum = ssFrontNumber + ssBackNumber;
long temp;
temp = Long.parseLong(ssNum);
if(ssNum.length() != 13) {
return errMsg;
}
inputData[12] = (int)(temp % 10);
temp = temp / 10;
for(int i=11;i>=0;i--) {
inputData[i] = (int)(temp % 10);
temp = temp / 10;
}
for(int j=0;j<12;j++) {
multData[j] = inputData[j] * checkData[j];
sum = sum + multData[j];
}
sum = sum % 11;
if(!((sum == 0)||(sum == 1)))
{
validChkNum = 11 - sum;
}
if(validChkNum == inputData[12])
{
return validMsg;
}
else
{
return invalidMsg;
}
}
String 형식의 메소드로 인자는 주민등록번호의 앞번호와 뒷번호를 각각 따로 받는다.
인자로 받은 두 번호를 합쳐서 길이가 13자인지 먼저 검사를 하고,
배열에 저장시켜준다.
배열에 저장한뒤 위에서 이야기 했던 순서대로 연산을 해 나간다.
계산된 최종 값 (validChkNum)과 검증숫자 (inputData[12]) 가 같은지 비교한 뒤 결과를 string 타입으로 리턴시켜 주게 된다.
반응형