85 lines
2.5 KiB
PHP
85 lines
2.5 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 화면 표시용 개인정보 비식별화 (저장 값은 변경하지 않음).
|
||
|
|
* ENC: 접두사 값은 pii_decrypt 후 마스킹한다.
|
||
|
|
*/
|
||
|
|
|
||
|
|
helper('pii_encryption');
|
||
|
|
|
||
|
|
if (! function_exists('mask_person_name')) {
|
||
|
|
/**
|
||
|
|
* 인명 마스킹 (예: 홍길동 → 홍*동, 김철 → 김*, 남궁민수 → 남**수).
|
||
|
|
*/
|
||
|
|
function mask_person_name(?string $name): string
|
||
|
|
{
|
||
|
|
if ($name === null) {
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
$plain = pii_decrypt(trim($name));
|
||
|
|
if ($plain === '') {
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
$len = mb_strlen($plain, 'UTF-8');
|
||
|
|
if ($len <= 1) {
|
||
|
|
return '*';
|
||
|
|
}
|
||
|
|
if ($len === 2) {
|
||
|
|
return mb_substr($plain, 0, 1, 'UTF-8') . '*';
|
||
|
|
}
|
||
|
|
$first = mb_substr($plain, 0, 1, 'UTF-8');
|
||
|
|
$last = mb_substr($plain, -1, 1, 'UTF-8');
|
||
|
|
if ($len === 3) {
|
||
|
|
return $first . '*' . $last;
|
||
|
|
}
|
||
|
|
|
||
|
|
return $first . str_repeat('*', $len - 2) . $last;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (! function_exists('mask_mobile_phone')) {
|
||
|
|
/**
|
||
|
|
* 휴대·개인 전화 표시용 (예: 010-1234-5678 → 010-****-5678).
|
||
|
|
* 10자리(02 등)·11자리 휴대번호·+82 형태를 단순 정규화 후 처리한다.
|
||
|
|
*/
|
||
|
|
function mask_mobile_phone(?string $phone): string
|
||
|
|
{
|
||
|
|
if ($phone === null) {
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
$plain = pii_decrypt(trim($phone));
|
||
|
|
if ($plain === '') {
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
$digits = preg_replace('/\D+/', '', $plain) ?? '';
|
||
|
|
if ($digits === '') {
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
if (str_starts_with($digits, '82') && strlen($digits) >= 12) {
|
||
|
|
$digits = '0' . substr($digits, 2);
|
||
|
|
}
|
||
|
|
$len = strlen($digits);
|
||
|
|
if ($len < 7) {
|
||
|
|
return str_repeat('*', min(11, max(4, $len)));
|
||
|
|
}
|
||
|
|
// 7~9자리도 실제 앞자리(통상 010 등)를 노출하고 가운데만 **** (***-****-xxxx 방지)
|
||
|
|
if ($len < 10) {
|
||
|
|
return substr($digits, 0, 3) . '-****-' . substr($digits, -4);
|
||
|
|
}
|
||
|
|
if ($len === 10) {
|
||
|
|
if (str_starts_with($digits, '02')) {
|
||
|
|
return '02-****-' . substr($digits, -4);
|
||
|
|
}
|
||
|
|
|
||
|
|
return substr($digits, 0, 3) . '-****-' . substr($digits, -4);
|
||
|
|
}
|
||
|
|
if ($len === 11) {
|
||
|
|
return substr($digits, 0, 3) . '-****-' . substr($digits, -4);
|
||
|
|
}
|
||
|
|
|
||
|
|
return substr($digits, 0, 3) . '-****-' . substr($digits, -4);
|
||
|
|
}
|
||
|
|
}
|