Programing/PHP

🔐 PHP로 문자열 중간을 마스킹하는 함수

2025. 4. 18. 09:16
반응형

웹 서비스에서는 사용자 정보를 보여줄 때 전체를 노출하는 대신, 일부만 보여주고 나머지는 가려주는 처리가 자주 필요합니다. 특히 이름, 전화번호, 이메일과 같은 개인정보의 경우 보안을 위해 중간 일부를 마스킹 처리하는 방식이 일반적으로 사용됩니다.

이 글에서는 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()은 한글도 정확하게 한 글자씩 나눌 수 있도록 만들어졌습니다.

🔎 마스킹 방식 설명

  1. 문자열 길이를 기준으로 3등분합니다.
  2. 앞과 뒤는 그대로 표시하고, 중간 영역만 마스킹합니다.
문자열 길이마스킹 범위 예시결과 예시
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
'Programing/PHP' 카테고리의 다른 글
  • php 비밀번호 유효성 검사
  • PHP 이메일 유효성 검사
  • PHP SEED ECB 암/복호화 샘플코드
  • PHP 윤년(leap year)체크
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    블로그
    IT 관련
    SQL
    기초
    자바스크립트유틸
    It
    iT's MY LiFE
    jsp
    php
    IT·컴퓨터
    js패턴
    자바
    Java
    IT블로그
    디자인패턴
    위시리스트
    읽고 싶은 책
    자바스크립트
    사고 싶은 책
    JavaScript
Dongkkase
🔐 PHP로 문자열 중간을 마스킹하는 함수
상단으로

티스토리툴바