우디의 개발스터디

[Javascript] 만나이 계산

by 개발자 우디

업무 중 중계서버에서 주민등록번호를 넘겨 받아 스크립트에서 만나이를 조건으로 분기해야하는 작업이 있었다. 함수로 간단하게 구현해봤는데 테스트 결과 문제없이 잘 동작하고 있다.


실제로는 아래 코드에 분기 조건까지 들어갔었지만 어차피 만나이를 계산하는 과정이 중요한거니까 해당 조건 분기 부분은 지우고 만나이를 계산해서 리턴하는 부분까지의 코드만 포스팅 하려고 한다.

필요한 사람이 있다면 참고하면 좋을 것 같다.

 

// 파라미터로 주민등록번호 받아서 만나이 계산
function fn_checkBirthAge(jumin){
	
	// 전달받은 주민번호 데이터에 '-' 확인 후 있으면 제거
	if(jumin.includes('-')){
		jumin = jumin.replace('-','');
	}
	
	// 전달받은 주민번호 데이터 자체에 문제가 있는 경우
	if(jumin.includes('-') == false && jumin.length != 13){
		console.log("==================ERROR:주민등록번호 데이터 확인 필요");
		return false;
	}
	
	let today = new Date();	// 현재 날짜 및 시간

	let juminFront = jumin.substr(0,6); // 주민번호앞자리
	let juminBackFirstVal = jumin.substr(6,1); //주민번호뒷자리 첫 문자열(2000년도 이전생인지 확인)

	let age = 0;
	let birthDate = null;
	let juminYear = null;
	let juminMonth = jumin.substr(2,2);//10
	let juminDate = jumin.substr(4,2);//03
	
	let monthCheck = 0;

	if(juminBackFirstVal == 1 || juminBackFirstVal == 2){
		// 2000년생 이전일 경우
		juminYear = "19" + jumin.substr(0,2);//93~~

		// 문법상 Month(월)은 0부터 시작하기 때문에 -1 처리해야 됨.
		birthDate = new Date(juminYear*1, juminMonth-1, juminDate*1);
		
		// 현재 연도에서 - 태어난 연도
		age = today.getFullYear() - birthDate.getFullYear();

		// 현재 월에서 - 태어난 월
		monthCheck = today.getMonth() - birthDate.getMonth();

		// 생일 월이 현재 월을 지나지 않았을 경우 만 나이기 때문에 -1
		if(monthCheck < 0 || (monthCheck === 0 && today.getDate() < birthDate.getDate())){
			age--;
		}
	}else{
		// 2000년생 이후
		juminYear = "20" + jumin.substr(0,2);//01~~
		
		birthDate = new Date(juminYear*1, juminMonth-1, juminDate*1);
		
		age = today.getFullYear() - birthDate.getFullYear();

		monthCheck = today.getMonth() - birthDate.getMonth();

		if(monthCheck < 0 || (monthCheck === 0 && today.getDate() < birthDate.getDate())){
			age--;
		}
	}

	console.log("=====================만 나이: ",age + "세");
		
	return age;
}


//TEST CASE 1
// fn_checkBirthAge('010509-3012345'); //00년생 이후 테스트

//TEST CASE 2
fn_checkBirthAge('9310031234567'); //00년생 이전 테스트
// fn_checkBirthAge('920216-1234567'); //00년생 이전 테스트

블로그의 정보

우디의 개발스터디

개발자 우디

활동하기