파이썬 라이브러리 re, 주민번호 마스킹
#003 파이썬 라이브러리 : re 정규 표현식으로 개인정보 보호
오늘날 세계에서는 개인 정보의 프라이버시가 가장 중요합니다. 보호가 필요한 정보 중 하나는 사회보장번호(SSN)입니다. SSN은 미국 정부가 시민과 거주자에게 발급하는 고유한 9자리 숫자로, 다양한 거래에서 기본 식별자 역할을 합니다.
한국에서도 주민번호가 보호되어야 합니다.
사회보장번호(SSN)나 주민번호를 보호하는 파이썬에서의 한 가지 방법은 re 모듈에서 정규식(regex)을 사용하여 마스킹하는 것입니다. 정규식(regex)은 문자열을 일치시키고 조작하는 데 사용할 수 있는 검색 패턴을 정의하는 일련의 문자입니다. 정규식을 사용하여 문자열에서 SSN 패턴을 검색하고 별표 또는 다른 문자로 바꿀 수 있습니다.
사회보장번호(SSN) 마스킹
사회보장번호(SSN)의 정규식 패턴은 "\d{3}-\d{2}-\d{4}"입니다. 이 패턴은 3자리 숫자, 하이픈, 2자리, 다른 하이픈, 마지막으로 4자리 순서와 일치합니다. 이 패턴을 사용하여 문자열의 모든 SSN을 마스킹할 수 있습니다.
예제 : ssn_masking.py로 저장하세요.
# Filename : ssn_masking.py
import re
def mask_ssn(text):
pattern = "\d{3}-\d{2}-\d{4}"
masked_text = re.sub(pattern, "XXX-XX-XXXX", text)
return masked_text
# Example usage
text = "John's social security number is 123-45-6789 and Jane's is 987-65-4321."
masked_text = mask_ssn(text)
print(masked_text)
▶ 결과
C:\Anaconda\envs\study_39\python.exe E:\python_study\ssn_masking.py
John's social security number is XXX-XX-XXXX and Jane's is XXX-XX-XXXX.
▶ 설명
위의 코드에서 문자열 인수 text를 사용하는 mask_ssn 함수를 정의하고 정규식 패턴 "\d{3}-\d{2}-\d{4}"를 사용하여 문자열에서 SSN 패턴을 검색하여, "XXX-XX-XXXX"로 바꿉니다. 그런 다음 함수는 마스킹된 문자열을 반환합니다.
그런 다음 두 개의 SSN을 포함하는 문자열 text를 만들고 이 문자열에서 mask_ssn 함수를 호출합니다. 결과 마스크 문자열은 masked_text에 저장되고 print 문을 사용하여 콘솔에 인쇄됩니다.
일부만 마스킹
전체 사회보장번호(SSN)가 아닌 SSN의 마지막 4자리만 마스킹하려면 mask_ssn 함수에 사용되는 정규식 패턴을 수정하면 됩니다.
예제 : ssn_masking_last4.py로 저장하세요.
# Filename : ssn_masking_last4.py
import re
def mask_ssn_last4(text):
pattern = "(?<=\d{3}-\d{2}-)\d{4}"
masked_text = re.sub(pattern, "XXXX", text)
return masked_text
# Example usage
text = "John's social security number is 123-45-6789 and Jane's is 987-65-4321."
masked_text = mask_ssn_last4(text)
print(masked_text)
▶ 결과
C:\Anaconda\envs\study_39\python.exe E:\python_study\ssn_masking_last4.py
John's social security number is 123-45-XXXX and Jane's is 987-65-XXXX.
▶ 설명
이 수정된 함수에서는 정규식 패턴 "(?<=\d{3}-\d{2}-)\d{4}"을 사용합니다. 이 패턴은 SSN의 처음 5자리를 나타내는 "\d{3}-\d{2}-" 패턴이 4자리 숫자에 선행하는 표현과 일치함을 표현합니다. 긍정적인 되돌아보기 어서션 (positive lookbehind assertion) (?<=\d{3}-\d{2}-)는 이 패턴 뒤에 오는 4자리 숫자만 일치시키도록 지정합니다.
그런 다음 re.sub() 메서드를 사용하여 이 4자리 숫자를 SSN의 마지막 4자리에 대한 마스크 역할을 하는 "XXXX"로 바꿉니다.
혹시 설명에 틀린 부분이 있으면 댓글로 알려주시기 바랍니다. 저는 정규표현식이 어려워서 마스킹 관련된 이런 소스는 별도로 저장했다가 참조합니다. ^^ |
정규표현식은 볼 때마다 어렵습니다. 정규식 연산에 대한 내용은
https://docs.python.org/ko/3/library/re.html
re — Regular expression operations
Source code: Lib/re/ This module provides regular expression matching operations similar to those found in Perl. Both patterns and strings to be searched can be Unicode strings ( str) as well as 8-...
docs.python.org
참조하시기 바랍니다.
주민번호 마스킹
앞에서 본 예제가 이해되었다면, 주민번호 뒷자리 마스킹도 할 수 있겠죠. 한 번 해 봅시다.
예제 : jumin_masking.py로 저장하세요.
# Filename : jumin_masking.py
# -*- coding:utf-8 -*-
import re
def mask_jumin(text):
pattern = "(?<=\d{6}-)\d{7}"
masked_text = re.sub(pattern, "XXXXXXX", text)
return masked_text
# Example usage
text = "홍길동의 주민번호는 '780305-1234567'입니다."
masked_text = mask_jumin(text)
print(masked_text)
▶ 결과
C:\Anaconda\envs\study_39\python.exe E:\python_study\jumin_masking.py
홍길동의 주민번호는 '780305-XXXXXXX'입니다.
▶ 설명 (생략)
감사합니다.
Do it! SQL을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다. |
'IT > 파이썬 라이브러리 (Python)' 카테고리의 다른 글
#006 파이썬 라이브러리 : calendar.isleap 윤년 계산 (43) | 2023.04.01 |
---|---|
#005 파이썬 라이브러리 : datetime.timedelta 날짜 간의 차이 및 계산 (54) | 2023.03.31 |
#004 파이썬 라이브러리 : datetime.date 날짜 및 요일 계산 (69) | 2023.03.30 |
#002 파이썬 라이브러리 : textwrap.shorten 문자열 축약 표시 (88) | 2023.03.28 |
#001 파이썬 라이브러리 : textwrap.wrap 문자열 줄바꿈 처리 (97) | 2023.03.27 |
댓글