본문 바로가기
IT/파이썬 라이브러리 (Python)

#003 파이썬 라이브러리 : re 정규 표현식으로 개인정보 보호

by DoitSQL 2023. 3. 29.
728x90

파이썬 라이브러리 re, 주민번호 마스킹

#003 파이썬 라이브러리 : re 정규 표현식으로 개인정보 보호

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을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다.

 

728x90

댓글