티스토리 뷰
주민등록번호 유효성 검사 프로그램 만들기
(조건)
- 0 0 1 0 1 1 - 3 0 6 8 5 1 8 (유효성 통과 번호)
- 2 3 4 5 6 7 8 9 2 3 4 5 를 곱하고 더함 (마지막 숫자 제외)
- 0+0+4+0+6+7+24+0+12+24+20+5 = 102
- 11로 나눈 나머지 값 ex) 101 % 11 = 3
- 11에서 위 값을 뺌 ex) 11 - 3 = 8
- 위 결과가 2자리인 경우, 10으로 나눈 나머지 값을 구함
- 결과값이 마지막 주민등록번호와 일치하면 유효성 통과
- 단, 클래스로 설계하고 객체를 이용하여 프로그램 작성
1) 방법 1 (클래스문 사용 x)
# 1. 주민등록번호 입력받기
id = input('주민번호 13자리 입력 : ').replace('-','')
calc = (2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5)
result = 0
# 2. 각 자릿수끼리 곱해서 더함 (마지막 숫자 제외)
for i in range(len(calc)):
result += int(id[i]) * calc[i]
# 3. 11 - (result를 11로 나눈 나머지)
result2 = 11 - result%11
# 4. result2 가 두 자리인 경우 10으로 나눈 나머지
if len(str(result2)) == 2:
result2 = result2%10
else :
print(f'계산 결과값 :{result2}')
# 5. result2 가 마지막 주민등록번호와 일치하면 유효성 통과
print('유효성 검사 통과') if result2 == int(id[len(id)-1]) else print('유효성 검사 탈락')
(결과)
주민번호 13자리 입력 : 001011-3068518
계산 결과값 :8
유효성 검사 통과
2) 방법 2 (클래스문 사용 o)
# 1. 클래스문 생성
class Id:
def __init__(self, num):
self.num = num.replace('-','')
def test(self):
calc = (2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5)
last_num = int(self.num[len(self.num)-1])
result1 = 0
result2 = 0
result3 = 0
# 1) 각 자릿수끼리 곱해서 더함 (마지막 숫자 제외)
for i in range(len(calc)):
result1 += int(self.num[i]) * calc[i]
print(f'(1단계) 각 자리수 곱의 합 : {result1}')
# 2) 11 - (result를 11로 나눈 나머지), 두 자리면 10으로 한번 더 나눈 나머지
result2 = (11 - result1%11) % 10
print(f'(2단계) 11 - {result1}을 11로 나눈 나머지 : {result2}')
# 3) 계산 결과가 마지막 주민등록번호와 일치하면 유효성 통과
if result2 == last_num:
print(f'최종 계산 결과 값 : {result2}')
print(f'마지막 주민등록번호 : {last_num}')
print('결과 : 유효성 검사 통과!!')
else:
print(f'최종 계산 결과 값 : {result2}')
print(f'마지막 주민등록번호 : {last_num}')
print('결과 : 유효성 검사 탈락ㅜㅜ')
# 2. 클래스문 적용
id = Id('001011-3068518')
id.test()
(결과)
(1단계) 각 자리수 곱의 합 : 102
(2단계) 11 - 102을 11로 나눈 나머지 : 8
최종 계산 결과 값 : 8
마지막 주민등록번호 : 8
결과 : 유효성 검사 통과!!
'Python' 카테고리의 다른 글
21. 파일 입출력 (0) | 2024.03.21 |
---|---|
20. 파이썬의 모듈 (0) | 2024.03.21 |
18. 파이썬의 예외처리 (0) | 2024.03.19 |
17. 파이썬의 스페셜 메서드 (0) | 2024.03.19 |
16. 파이썬의 상속 (0) | 2024.03.19 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 출력
- animation적용
- html이론
- DB단어장
- 절대위치
- MySQLdb
- CSS
- 솔로의식탁
- DB프로그램만들기
- 닷홈
- MySQL
- Python
- 로또번호생성
- HTML
- JavaScript
- 상대위치
- 파이썬SQL연동
- trasform
- EPL정보프로그램
- 셋
- 박스사이징
- Enclosing
- 클래스문
- 리스트
- FOR
- 폼
- 고정위치
- __call__
- 변수
- 줄 간격
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함