WjExplor Story

주민등록번호 가리기 본문

Python/Python : Code Study

주민등록번호 가리기

더블유제이플로어 2025. 9. 15. 21:39

실습 설명

주민등록번호 YYMMDD-abcdefg는 총 열세 자리인데요.

앞의 여섯 자리 YYMMDD는 생년월일을 의미합니다.

  • YY → 연
  • MM → 월
  • DD → 일

뒤의 일곱 자리 abcdefg는 살짝 복잡합니다.

  • a → 성별
  • bc → 출생등록지에 해당하는 지방자치단체의 고유번호
  • defg → 임의의 번호

보시다시피 많은 부분은 특정 규칙대로 정해져 있는데요. 여러분에 대한 몇 가지 정보만 알면, 마지막 네 개 숫자 defg를 제외한 앞의 아홉 자리는 쉽게 알 수 있다는 거죠.

그래서 저희는 주민등록번호의 마지막 네 자리 defg만 가려 주는 보안 프로그램을 만들려고 합니다.

mask_security_number라는 함수를 정의하려고 하는데요. 이 함수는 파라미터로 문자열 security_number를 받고, security_number의 마지막 네 글자를 '*'로 대체한 새 문자열을 리턴합니다.

참고로 파라미터 security_number에는 작대기 기호(-)가 포함될 수도 있고, 포함되지 않을 수도 있는데요. 작대기 포함 여부와 상관 없이, 마지막 네 글자가 '*'로 대체되어야 합니다!

출처 : 코드잇


실습 결과

def mask_security_number(security_number):
    # 여기에 코드를 작성하세요
    return security_number[:-4]+"****"

    

# 테스트 코드
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))

# 실습결과
# 880720-123****
# 880720123****
# 930124-765****
# 930124765****
# 761214-235****
# 761214235****

또는

def mask_security_number(security_number):
    num_list = list(security_number)

    # 마지막 네 값을 *로 대체
    for i in range(len(num_list) - 4, len(num_list)):
        num_list[i] = '*'

    # 리스트를 문자열로 복구하여 반환
    return ''.join(num_list)

주요 함수 설명

 `for i in range(start, stop):`
- `start`부터 `stop - 1`까지의 숫자를 차례대로 `i`에 넣으면서 반복합니다.
- `for i in range(len(num_list) - 4, len(num_list)):`는 리스트의 마지막 4개 요소의 '위치(인덱스)'를 순회하라는 의미입니다.

  range() 함수 문법 자세히 보기
  1. `range(끝)`
     - 0부터 끝-1까지의 숫자를 만듭니다.
     - 예: range(5)는 0, 1, 2, 3, 4를 의미합니다.

  2. `range(시작, 끝)`
     - 시작부터 끝-1까지의 숫자를 만듭니다.
     - 예: range(1, 6)은 1, 2, 3, 4, 5를 의미합니다.

  3. `range(시작, 끝, 단계)`
     - 시작부터 끝-1까지 단계만큼 건너뛰며 숫자를 만듭니다.
     - 예: range(0, 10, 2)는 0, 2, 4, 6, 8을 의미합니다.

`'구분자'.join(리스트)`
- 리스트 안의 문자열들을 `구분자`로 연결하여 하나의 긴 문자열로 만듭니다.
- `''` (빈 문자열)을 구분자로 쓰면, 아무 구분 없이 모든 요소를 그대로 이어 붙입니다.
- 실무에서 여러 문자열 조각을 합칠 때 가장 효율적이고 표준적인 방법입니다.

`join`은 리스트 안의 문자열들을 합칠 때 사용하며, 앞에 어떤 문자열을 두느냐에 따라 결과가 달라집니다.


주요 함수 추가 예시(range())

  1. `range(끝)`: 0부터 '끝 - 1'까지
     가장 기본적인 형태로, 0부터 시작해서 특정 횟수만큼 반복할 때 사용합니다.

     # 0부터 4까지 5번 반복
     # 출력:
     # 0
     # 1
     # 2
     # 3
     # 4
def ZeroToNum(num):
    for i in range(num+1):
        print(i)
        
ZeroToNum(4)

2. `range(시작, 끝)`: '시작'부터 '끝 - 1'까지
시작점을 0이 아닌 다른 숫자로 지정하고 싶을 때 사용합니다.

```python
# 1부터 5까지의 합 구하기
출력: 15
```
def SumFunc(num):
    total = 0
    for i in range(num+1):
        total += i
    return total

print(SumFunc(5))

3. `range(시작, 끝, 단계)`: '시작'부터 '끝 - 1'까지 '단계'만큼 건너뛰며
짝수만, 홀수만, 또는 N의 배수만 처리하고 싶을 때 유용합니다.

# 0부터 10까지 짝수만 출력
# 5부터 1까지 거꾸로 세기
def print_even_numbers(max_num):
    for i in range(max_num+1):
        if(i %2 ==0):
            print(i)

def print_reverse(from_num):
   # from_num 부터 1까지 -1 단계로 거꾸로 센다
   for i in range(from_num,0,-1):
       print(i)
    
print_even_numbers(10)
print("==========================")
print_reverse(5)

reverse()는 리스트 자체를 뒤집는 특별한 기능(메서드)이다.

- reverse()는 list라는 클래스(설계도)에 바로 사용하는 것이 아니라, my_list처럼 이미 만들어진 실제 리스트 객체에 사용해야
      합니다. (예: my_list.reverse())
  range(시작, 끝, 단계)에서 단계에 -1을 주면 숫자를 거꾸로 세어줍니다.


1. 빈 문자열 `''`로 합치기
리스트의 요소들을 아무런 구분자 없이 그대로 이어 붙입니다.

chars = ['p', 'y', 't', 'h', 'o', 'n']
# 출력: "python"
chars = ['p', 'y', 't', 'h', 'o', 'n']
print(''.join(chars))
# join() 함수는 문자열 메소드입니다. 리스트(chars)에서 호출하는 것이 아니라,
# 리스트의 요소들을 합칠 때 사용할 구분자(separator) 문자열에서 호출해야 합니다.
# 예를 들어, 빈 문자열로 모든 문자를 합치려면 ''.join(chars) 와 같이 사용해야 올바른 문법입니다.

2. 공백 `' '`으로 합치기
단어 리스트를 하나의 문장으로 만들 때 흔히 사용합니다.

words = ['Hello', 'World', 'This', 'is', 'Python']
 # 출력: "Hello World This is Python"
print(' '.join(words))

3. 쉼표+공백 `', '`으로 합치기
CSV(Comma-Separated Values) 형태나 사람이 읽기 좋은 목록을 만들 때 사용합니다.

items = ['사과', '바나나', '오렌지']
# 출력: "사과, 바나나, 오렌지"
print(' , '.join(items))

4. 다른 기호 `'-'`로 합치기
전화번호나 날짜처럼 특정 형식의 문자열을 만들 때 유용합니다.

phone_parts = ['010', '1234', '5678']
# 출력: "010-1234-5678"
print('-'.join(phone_parts))

 

5. ※ 주의: `join`은 **문자열 리스트**에만 사용할 수 있습니다. 숫자 리스트를 합치려면 먼저 각 숫자를 문자열로 변환해야 합니다.

numbers= [1, 2, 3, 4, 5]
# 출력: "12345"
number_str = [str(n) for n in numbers]
print(''.join(number_str))
# 아래 코드는 '리스트 컴프리헨션(List Comprehension)' 구문입니다.
# for 반복문을 사용하여 리스트의 각 요소를 처리하고, 그 결과로 새로운 리스트를 생성합니다.

# 1. numbers = [1, 2, 3, 4, 5] : 숫자들로 이루어진 리스트를 정의합니다.
numbers= [1, 2, 3, 4, 5]

# 2. [str(n) for n in numbers] : 리스트 컴프리헨션
#    - `for n in numbers` : numbers 리스트에서 요소를 하나씩 꺼내 `n`에 할당하며 반복합니다. (n은 1, 2, 3, 4, 5 순서가 됩니다)
#    - `str(n)` : 각각의 숫자 `n`을 문자열 형태로 변환합니다. (e.g., 1 -> '1')
#    - `[...]` : 이렇게 변환된 문자열('1', '2', '3', '4', '5')들을 모아 새로운 리스트를 만듭니다.
#
# 3. number_str = ... : 생성된 새로운 리스트 ['1', '2', '3', '4', '5']를 `number_str` 변수에 할당합니다.
number_str = [str(n) for n in numbers]

# 4. print(''.join(number_str)) : `number_str` 리스트의 요소들을 빈 문자열('')을 기준으로 합쳐서 출력합니다.
#    결과: '12345'
print(''.join(number_str))

'Python > Python : Code Study' 카테고리의 다른 글

[점프 투 파이썬] 05-5 내장함수 map(f, iterable)  (0) 2025.09.17
팰린드롬  (0) 2025.09.16
자릿수 합 구하기  (0) 2025.09.15
PYTHONPATH 환경 변수  (0) 2025.09.14
if __name__ == "__main__" 정리  (0) 2025.09.12