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 = "👩";
} else {
System.out.println("남자");
gender = "남자";
genderEmoji = "👨";
}
// 나이
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 |