티스토리 뷰

반응형

웹서비스 관련된 과제를 하면서 작성했던 주민등록번호 유효성 검사에 대한 메소드를 구현해 보겠다.

 

먼저 주민등록번호는 유효성을 검사하는 일종의 공식(?) 이 있다.

 

차근차근 방법을 따라가 보자.

 

 

예를들어 주민등록번호가 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 타입으로 리턴시켜 주게 된다.

 

 

반응형