본문 바로가기

STUDY/JSP

20240307 주민번호 분석기

728x90

이름과 주민번호를 입력하는 snForm.jsp를 만들었다.

이름,주민번호는 snAction.jsp로 넘어간다.

snForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 메뉴 -->
	<div>
		<a href="../index.jsp">index</a>
	</div>
	
	<h1>snAction</h1>
	
	<form action="./snAction.jsp">
		이름 : <input type="text" name="name">
		<br>
		주민등록번호 : 
		<input type="number" name="sn1">
		-
		<input type="number" name="sn2">
		
		<button type="submit">주민번호 분석</button>
	
	</form>
</body>
</html>

 

주민번호 앞자리와 뒷자리를 getParameter()로 받아 더해서 String으로 선언한다.

그 후 앞자리가 6자리가 아니고 뒷자리가 7자리가 아니면 redirect하여 snForm.jsp를 요청한다.

 

유효성 검사 통과했으면

 

주민등록 번호를 substring을 사용해 년도, 월, 일, 성별을 얻는다.

내국인,귀화인,사망자에 따라 person출력값, 성별, 만 나이를 변경한다.

 

최종 설정된 값인

*로 처리된 이름, 출신(생사 유무), 성별, 만나이를 페이지로 출력한다

 

snAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%
	// 글자값.length() --> 글자 길이
	String sn1 = request.getParameter("sn1");
	String sn2 = request.getParameter("sn2");
	String sn =  sn1 + sn2;
	// System.out.println("sn.length() : " + sn.length());

	// 유효성 검사(validation)
	if(sn1.length() != 6 && sn2.length() != 7) {
		response.sendRedirect("http://localhost/webjava/if/snForm.jsp");
		return;
	}
	
	// 글자값.substring(x, y) --> 글자를 분해하여 일부만 반환하는 메서드
	String genderStr = sn.substring(6, 7);
	// 0 7 1 2 2 5  3 1 1 1 1 1 1
	// 0 1 2 3 4 5 (6 7)8 9 101112
	int genderNum = Integer.parseInt(genderStr);
	String person = null;
	String gender = null;
	String genderEmoji = null;
	
	if(genderNum >= 1 && genderNum <= 4) {
		System.out.println("내국인");
		person = "내국인 입니다";
	} else if(genderNum >=5 && genderNum <=8) {
		System.out.println("귀화인");
		person = "귀화인 입니다";
	} else {	// 0, 9
		System.out.println("사망 후 주민번호 부여");
		person = "사망 후 주민번호 부여받았습니다";
	}
	
	if(genderNum % 2 == 0) {
		System.out.println("여자");
		gender = "여자";
		genderEmoji = "&#128105;";
	} else {
		System.out.println("남자");
		gender = "남자";
		genderEmoji = "&#128104;";
	}
	
	// 나이
	Calendar today = Calendar.getInstance();
	int todayYear = today.get(Calendar.YEAR);	// 날짜변수에서 년도(4자리) 추출 후 반환
	int todayMonth = today.get(Calendar.MONTH) + 1;	// 날짜변수에서 월 추출 후 반환 / 1월 -> 0, 2월 -> 1, ...
	int todayDate = today.get(Calendar.DATE);	//날짜변수에서 일 추출 후 반환
	
	// 디버깅
	System.out.println(todayYear);
	System.out.println(todayMonth);
	System.out.println(todayDate);
	
	// 입력한 주민번호에서 생일 날짜 구하기
	String yearStr = sn.substring(0, 2);	// 제일 앞 두자리(탄생 년도)
	if(genderNum == 1 || genderNum == 2 || genderNum == 5 || genderNum == 6) {
		yearStr = "19" + yearStr;
	} else if(genderNum == 3 || genderNum == 4 || genderNum == 7 || genderNum == 8) {
		yearStr = "20" + yearStr;
	}
	
	String monthStr = sn.substring(2, 4);	// 탄생 월
	String dateStr = sn.substring(4, 6);	// 탄생 일
	
	int yearNum = Integer.parseInt(yearStr);
	int monthNum = Integer.parseInt(monthStr);
	int dateNum = Integer.parseInt(dateStr);
	
	
	// 나이 구하는 알고리즘
	// 생일이 지난 경우 : 오늘년도 - 생일년도
	// 생일이 지나지않은 경우 : 오늘년도 - 생일년도 -1
	int age = todayYear - yearNum;
	
	if(todayMonth < monthNum){
		age = age - 1;
	} else if(todayMonth == monthNum){
		if(todayDate < dateNum) {
			age = age - 1;
		}
	}
	
	// 만 나이 출력
	System.out.println(age);
	
	// 이름
	String name = request.getParameter("name");
	System.out.println(name);

	// 이름 중간을 *로 변경
	String hideName = name.substring(0, 1) + "*" + name.substring(2);
	System.out.println(hideName);
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 메뉴 -->
	<div>
		<a href="../index.jsp">index</a>
	</div>
	
	<h1>snAction</h1>

	<%=hideName%>님은 <%=person%><br>
	
	성별 : <%=genderEmoji%><br>
	
	<%
		if(genderNum != 0 && genderNum != 9){
	%>
			만 나이 : <%=age%>
	<%
		}
	%>
	

</body>
</html>

 

728x90

'STUDY > JSP' 카테고리의 다른 글

20240308 달력(3월)  (0) 2024.03.08
20240308 구구단  (0) 2024.03.08
20240307 계산기 페이지  (0) 2024.03.07
20240307 로그인 페이지 구현  (0) 2024.03.07
20240307 가위바위보 페이지  (0) 2024.03.07