과제
2022.07.01 / Hw1
키보드를 통해서 주민번호를 입력 했을때 유효한
주민번호 인지 아닌지를 판별하는 프로그램을 작성하세요
(단, 유효하지 않은 주민번호의 경우에는 메시지를 출력)
1. 주민번호 앞자리 6자리가 아니면 메시지 출력
2. 주민번호 뒷자리 7자리가 아니면 메시지 출력
3. 유효한 주민번호 아니면 메시지 출력
■ 주민 등록 번호 타당성 검사법
1. 주민 번호 각 자리에 해당 숫자를 곱한다.
예) 8 0 0 1 0 1 - 1 2 3 4 5 6 7
체크용 번호 : 마지막 숫자 7
☓ )2 3 4 5 6 7 8 9 2 3 4 5
(8*2)+(0*3)+(0*4)+(1*5)+(0*6)+(1*7)+(1*8)+(2*9)+(3*2)+(4*3)+(5*4)+(6*5) = 122
2. 1번의 연산 결과를 11로 나누어서 나머지를 구한다.
122 / 11 = 11 ............ 1
(몫) (나머지)
3. 11에서 나머지 값을 뺀후 “체크용 번호와”와 비교해서 같으면 올바른
주민번호, 그렇지 않으면 틀린 주민 번호
11 - 1 = 10 ≠ 7
(연산결과) (체크용 번호)
만약, 연산결과가 10이상이면, 다시 10으로 나누어서 그 나머지를 체크용 번호와 비교 한다.
10 / 10 = 1 ......... 0 ≠ 7
(몫) (나머지) (체크용 번호)
테스트 값
1 1 1 1 1 1 - 1 1 1 1 1 1 8 (올바른 주민번호)
8 0 0 1 0 1 - 1 2 3 4 5 6 7(틀린 주민번호)
의도
String 클래스의 메소드 활용
깃허브
https://github.com/kindacool/Hw/blob/main/HW20220701/JuminHw.java
GitHub - kindacool/Hw
Contribute to kindacool/Hw development by creating an account on GitHub.
github.com
코드
package p2022_07_01;
import java.util.Scanner;
public class JuminHw {
public static void main(String[] args) {
// 키보드로 주민번호 입력받기
Scanner sc = new Scanner(System.in);
System.out.println("주민번호 앞자리를 입력 하세요?");
String jumin1 = sc.nextLine();
System.out.println("주민번호 뒷자리를 입력 하세요?");
String jumin2 = sc.nextLine();
// 유효성 검사
if (jumin1.length() != 6) {
System.out.println("주민번호 앞자리 6자리를 입력하세요.");
} else if (jumin2.length() != 7) {
System.out.println("주민번호 뒷자리 7자리를 입력하세요.");
} else if (!check(jumin1, jumin2)) {
System.out.println("틀린 주민번호 입니다.");
} else {
System.out.println("올바른 주민번호 입니다.");
}
}
static boolean check(String jumin1, String jumin2) {
// 공식의 숫자들
int[] a = { 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 };
int total = 0;
// 앞자리 처리
for (int i = 0; i < jumin1.length(); i++) {
String j = jumin1.substring(i, i + 1);
total += a[i] * Integer.parseInt(j);
}
// 뒷자리 처리(마지막 숫자 빼기)
for (int i = 0; i < jumin2.length() - 1; i++) {
String j = jumin2.substring(i, i + 1);
total += a[i + 6] * Integer.parseInt(j);
}
// 연산
int total2 = total % 11;
int total3 = 11 - total2;
if (total3 >= 10) {
total3 %= 10;
}
// 체크숫자와 같은지 확인
if (total3 == Integer.parseInt(jumin2.substring(6, 7))) {
return true;
} else {
return false;
}
}
}
출력
강사님 코드
package p2022_07_04;
import java.io.InputStream;
import java.util.Scanner;
public class JuminCheck01 {
// 주민번호 타당성 검사하는 메소드
public static boolean juminCheck(String jumin) {
// jumin = "9010101234567";
int total = 0;
int total2;
// total += Integer.parseInt(jumin.substring(0, 1)) * 2;
// total += Integer.parseInt(jumin.substring(1, 2)) * 3;
// total += Integer.parseInt(jumin.substring(2, 3)) * 4;
// total += Integer.parseInt(jumin.substring(3, 4)) * 5;
// total += Integer.parseInt(jumin.substring(4, 5)) * 6;
// total += Integer.parseInt(jumin.substring(5, 6)) * 7;
// total += Integer.parseInt(jumin.substring(6, 7)) * 8;
// total += Integer.parseInt(jumin.substring(7, 8)) * 9;
// total += Integer.parseInt(jumin.substring(8, 9)) * 2;
// total += Integer.parseInt(jumin.substring(9, 10)) * 3;
// total += Integer.parseInt(jumin.substring(10, 11)) * 4;
// total += Integer.parseInt(jumin.substring(11, 12)) * 5;
int[] mul = { 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 };
for (int i = 0; i <= 11; i++) {
total += Integer.parseInt(jumin.substring(i, i + 1)) * mul[i];
}
total %= 11; // total = total % 11;
total2 = 11 - total;
if (total2 > 9)
total2 = total2 % 10;
if (total2 != Integer.parseInt(jumin.substring(12, 13))) {
return false; // 체크용 번호와 일치하지 않을때
} else {
return true;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// JuminCheck01 jc = new JuminCheck01();
InputStream is = System.in;
Scanner sc = new Scanner(is);
System.out.println("주민번호 앞자리를 입력 하세요?");
String jumin1 = sc.next(); // 900101
System.out.println("주민번호 뒷자리를 입력 하세요?");
String jumin2 = sc.next(); // 1234567
if (jumin1.length() != 6) {
System.out.println("주민번호 앞자리는 6자리 입력");
} else if (jumin2.length() != 7) {
System.out.println("주민번호 뒷자리는 7자리 입력");
} else if (!juminCheck(jumin1 + jumin2)) {
System.out.println("잘못된 주민번호 입니다.");
} else {
System.out.println("올바른 주민번호 입니다");
}
}
}
'국비지원 과정 > HW' 카테고리의 다른 글
2022.07.05 / 과제1번 : 윤년구하기 (0) | 2022.07.05 |
---|---|
2022.07.04 / 과제1번 : 원주, 원의 면적, 구의 면적, 구의 부피 구하기 (0) | 2022.07.04 |
2022.06.30 / 과제2번 : Calender 클래스로 연,월,일,시,분,초,요일 구하기 (0) | 2022.06.30 |
2022.06.30 / 과제1번 : 객체 배열에 회원정보 입력2, 초기화 (0) | 2022.06.30 |
2022.06.29 / 과제1번 : 객체 배열에 회원정보 입력1, 초기화 (0) | 2022.06.29 |