정규식으로 마스킹하는 방법이 존재하지만, 익스플로러에서 호환성 문제로 동작하지 않는 이슈가 존재합니다.
이름
function maskingName(name) {
if (name.length <= 2) {
return name.replace(name.substring(0, 1), "*");
}
return (
name[0] +
"*".repeat(name.substring(1, name.length - 1).length) +
name[name.length - 1]
);
}
maskingName("홍길동");
// mask - 홍*동
maskingName("김길");
// mask - *길
1~2글자는 첫 문자를 *로 바꿔주고 3글자부터는 가운데 글자를 *로 바꿔주는 코드입니다. replace() 메서드 대신에 repeat() 메서드를 사용해 주었습니다.
전화번호
function maskingPhoneNumber(phoneNumber) {
const values = phoneNumber.split("-");
values[1] = "*".repeat(values[1].length);
return values.join("-");
}
maskingPhoneNumber("010-1111-2222");
// mask - 010-****-2222
전화번호의 하이픈을 기준으로 쪼개서, 가운데를 *로 바꿔주는 코드입니다. 전화번호에 하이픈을 넣어주는 코드는 아래 포스팅을 참고해 주세요!.
이메일
function maskingEmail(email) {
const mask = "*".repeat(email.split("@")[0].length - 1);
return email[0] + mask + email.slice(mask.length + 1, email.length);
}
maskingEmail("asd123456@naver.com");
// mask - a********@naver.com
mask 문자를 만들 때 맨 앞글자를 제외시킨 숫자만큼 마스킹 처리를 해주고 남은 문자들을 합쳐서 반환해 줍니다.
주민등록번호
function maskingRrn(number) {
return number.substring(0, number.length - 6) + "******";
}
maskingRrn("000203-1234567");
// mask - 000203-1******
대부분의 주민번호 형식은 YYMMDD-GHIJKLX으로 6자리-7자리로 구성되어 있습니다. 뒷자리 6자리가 워낙 중요하기에 *로 대체해 줍니다.
계좌번호
function maskingAccountNumber(accountNumber) {
const mask = "*".repeat(accountNumber.split("-").at(-1).length);
return accountNumber.substring(0, accountNumber.length - mask.length) + mask;
}
maskingAccountNumber("022-01-1111");
// 022-01-****
은행마다 계좌번호 형태가 다릅니다. 마스킹 작업을 수월하게 하기 위해서는 하이픈이 들어간 계좌번호여야 합니다.