반응형
웹 서비스에서는 사용자 정보를 보여줄 때 전체를 노출하는 대신, 일부만 보여주고 나머지는 가려주는 처리가 자주 필요합니다. 특히 이름, 전화번호, 이메일과 같은 개인정보의 경우 보안을 위해 중간 일부를 마스킹 처리하는 방식이 일반적으로 사용됩니다.
이 글에서는 PHP로 구현한 strMaskingCenter() 함수를 중심으로, 한글까지 정확하게 처리할 수 있는 문자열 마스킹 로직을 소개합니다.
✅ 핵심 기능
- 입력된 문자열의 중간 영역을 마스킹 문자로 대체합니다.
- 마스킹 범위는 문자열 길이에 따라 자동 계산됩니다.
- 한글 문자열도 정확하게 처리할 수 있도록 멀티바이트 대응 함수가 포함되어 있습니다.
💻 전체 코드
function strMaskingCenter($_str='', $_mask='*')
{
$_str = mbStrSplit($_str);
$all_length = sizeof($_str);
$start_length = (int)($all_length / 3);
$end_length = $all_length - $start_length - 1;
if ($all_length == 2) {
$start_length = 1;
$end_length = 1;
}
for ($i = 0; $i < $all_length; $i++) {
if (numberBetween($i, $end_length, $start_length)) {
$_str[$i] = $_mask;
}
}
return @implode($_str);
}
🔧 함께 사용하는 보조 함수
📍 범위 체크 함수
function numberBetween($_n, $_max, $_min)
{
if ($_n < $_min) return false;
if ($_n > $_max) return false;
return true;
}
- 특정 숫자가 지정된 범위 내에 포함되는지를 판단합니다.
- $_min <= $_n <= $_max 형태의 비교를 수행합니다.
📍 멀티바이트 문자열 분할 함수 (한글 처리 포함)
function mbStrSplit($str)
{
$ret = array();
for ($i = 0; $i < mb_strlen($str, "UTF-8"); $i++) {
array_push($ret, mb_substr($str, $i, 1, "UTF-8"));
}
return $ret;
}
- str_split()은 기본적으로 한글 등 멀티바이트 문자를 정확하게 쪼개지 못합니다.
- mbStrSplit()은 한글도 정확하게 한 글자씩 나눌 수 있도록 만들어졌습니다.
🔎 마스킹 방식 설명
- 문자열 길이를 기준으로 3등분합니다.
- 앞과 뒤는 그대로 표시하고, 중간 영역만 마스킹합니다.
문자열 길이마스킹 범위 예시결과 예시
2 | 두 글자 | 김* |
3 | 가운데 한 글자 | 홍*동 |
4 | 가운데 두 글자 | 가**라 |
7 | 가운데 세 글자 | 가나***바사 |
8 | 가운데 네 글자 | 가나****사아 |
🧪 사용 예시
strMaskingCenter('홍길동'); // "홍*동"
strMaskingCenter('김철수'); // "김*수"
strMaskingCenter('abcdef'); // "ab**ef"
strMaskingCenter('홍'); // "*"
strMaskingCenter('박지성', '#'); // "박#성"
strMaskingCenter('김태희안녕하세요'); // "김태****세요"
🧠 활용 예
이 함수는 다음과 같은 상황에서 사용할 수 있습니다:
- 사용자 이름 마스킹: "홍*동"
- 전화번호 일부 숨김: 01012345678 → 010*****678
- 이메일 아이디 가리기: abcde@gmail.com → a****@gmail.com (별도 분기 필요)
- 주소 중간 숨기기: "서울특별시 강남구 역삼동" → "서울특별시 ** 역삼동"
🔄 개선/확장 아이디어
- 마스킹할 범위를 사용자가 지정할 수 있도록 인자 추가
- 마스킹 시작 위치, 길이 설정 지원
- 이메일 형식에 맞춘 전용 마스킹 함수 별도 구현
- 출력 길이에 따라 ***의 개수를 자동 조정
이 함수는 단순하지만 실무에서 매우 자주 활용되는 유틸리티 중 하나입니다. 특히 멀티바이트 문자까지 정확하게 처리할 수 있도록 설계된 점에서 안정성과 활용성을 동시에 고려한 구현이라고 볼 수 있습니다.
반응형
'Programing > PHP' 카테고리의 다른 글
PHP와 JavaScript로 구현하는 게시물 등록일 상대 표기 (0) | 2025.05.28 |
---|---|
php 비밀번호 유효성 검사 (1) | 2025.04.22 |
PHP 이메일 유효성 검사 (0) | 2025.04.22 |
PHP SEED ECB 암/복호화 샘플코드 (0) | 2023.05.15 |
PHP 윤년(leap year)체크 (0) | 2019.06.26 |
PHP 배열 첫번째 키값 가지고 오기 (0) | 2019.01.07 |
PHP 정규식 비밀번호 유효성 검사 (0) | 2019.01.05 |
PHP 정규식 이메일 유효성 검사 (0) | 2019.01.05 |