// 기본 전화번호 마스킹 함수
function maskPhoneNumber(phone, type = 'middle') {
// 숫자만 추출
const numbers = phone.replace(/\D/g, '');
// 국가번호 처리
let cleanNumber = numbers;
if (numbers.startsWith('82')) {
cleanNumber = '0' + numbers.substring(2);
}
// 전화번호 유형 판별 및 마스킹
if (cleanNumber.startsWith('010') || cleanNumber.startsWith('011') ||
cleanNumber.startsWith('016') || cleanNumber.startsWith('017') ||
cleanNumber.startsWith('018') || cleanNumber.startsWith('019')) {
return maskMobilePhone(cleanNumber, type);
} else if (cleanNumber.startsWith('02')) {
return maskSeoulPhone(cleanNumber, type);
} else if (cleanNumber.length === 10 || cleanNumber.length === 11) {
return maskLocalPhone(cleanNumber, type);
}
return '올바르지 않은 전화번호 형식';
}
// 휴대폰 번호 마스킹
function maskMobilePhone(phone, type) {
const part1 = phone.substring(0, 3); // 010
const part2 = phone.substring(3, 7); // 1234
const part3 = phone.substring(7); // 5678
switch(type) {
case 'middle':
return `${part1}-****-${part3}`;
case 'partial':
return `${part1}-${part2.substring(0,2)}**-${part3.substring(0,2)}**`;
case 'end':
return `${part1}-${part2}-****`;
case 'heavy':
return `${part1.substring(0,2)}*-****-****`;
default:
return `${part1}-****-${part3}`;
}
}
// 서울 지역번호 마스킹
function maskSeoulPhone(phone, type) {
if (phone.length === 9) {
const part1 = '02';
const part2 = phone.substring(2, 5);
const part3 = phone.substring(5);
switch(type) {
case 'middle':
return `${part1}-***-${part3}`;
case 'partial':
return `${part1}-${part2.substring(0,1)}**-${part3.substring(0,2)}**`;
case 'end':
return `${part1}-${part2}-****`;
case 'heavy':
return `02-****-****`;
default:
return `${part1}-***-${part3}`;
}
} else if (phone.length === 10) {
const part1 = '02';
const part2 = phone.substring(2, 6);
const part3 = phone.substring(6);
switch(type) {
case 'middle':
return `${part1}-****-${part3}`;
case 'partial':
return `${part1}-${part2.substring(0,2)}**-${part3.substring(0,2)}**`;
case 'end':
return `${part1}-${part2}-****`;
case 'heavy':
return `02-****-****`;
default:
return `${part1}-****-${part3}`;
}
}
return '올바르지 않은 서울 지역번호';
}
// 지역번호 마스킹
function maskLocalPhone(phone, type) {
if (phone.length === 10) {
const part1 = phone.substring(0, 3);
const part2 = phone.substring(3, 6);
const part3 = phone.substring(6);
switch(type) {
case 'middle':
return `${part1}-***-${part3}`;
case 'partial':
return `${part1}-${part2.substring(0,1)}**-${part3.substring(0,2)}**`;
case 'end':
return `${part1}-${part2}-****`;
case 'heavy':
return `${part1}-****-****`;
default:
return `${part1}-***-${part3}`;
}
} else if (phone.length === 11) {
const part1 = phone.substring(0, 3);
const part2 = phone.substring(3, 7);
const part3 = phone.substring(7);
switch(type) {
case 'middle':
return `${part1}-****-${part3}`;
case 'partial':
return `${part1}-${part2.substring(0,2)}**-${part3.substring(0,2)}**`;
case 'end':
return `${part1}-${part2}-****`;
case 'heavy':
return `${part1}-****-****`;
default:
return `${part1}-****-${part3}`;
}
}
return '올바르지 않은 지역번호';
}
// 배열의 전화번호들을 일괄 마스킹
function maskPhoneArray(phoneArray, type = 'middle') {
return phoneArray.map(phone => maskPhoneNumber(phone, type));
}
// 텍스트에서 전화번호를 찾아서 마스킹
function maskPhoneInText(text, type = 'middle') {
const phoneRegex = /(\+?82-?)?0\d{1,2}-?\d{3,4}-?\d{4}/g;
return text.replace(phoneRegex, (match) => maskPhoneNumber(match, type));
}