본문 바로가기
Javascript

Javascript Masking

by NaHyungMin 2021. 11. 12.

개인정보에 관련하여 고객 정보를 Masking해야 한다는 이야기를 들었다.

서버 쪽에서도 처리할건 하겠지만, 일단 Javascript로 처리하는 기능을 인터넷에 검색해서 만듬.

 

let maskingFunction = {
    checkNull: function (str) {
        return typeof str === "undefined" || str === null || str.length === 0;
    },

    checkConfigEnable: function () {
        //Global
        return isMaskingEnable;
    },

    email: function (str, isBackStrMasking) {
        if(this.checkNull(str) === true || this.checkConfigEnable() === false) {
            return str;
        }

        let email = str.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);

        if(this.checkNull(email) === true || this.checkNull(str) === true) {
            return str;
        } else {
            let length = email.toString().split('@')[0].length - 3;

            return isBackStrMasking === true
                ? str.replace(new RegExp('.(?=.{0,' + length + '}@)', 'g'), '*').replace(/.{6}$/, "******")
                : str.replace(new RegExp('.(?=.{0,' + length + '}@)', 'g'), '*');
        }
    },

    phone: function (str) {
        let maskingPhoneStr;

        if(this.checkNull(str) === true || this.checkConfigEnable() === false) {
            return str;
        }

        //- 존재.
        if(str.indexOf('-') > -1) {
            let phoneStr = str.match(/\d{2,3}-\d{3,4}-\d{4}/gi);

            if(this.checkNull(phoneStr) === true) {
                return str;
            }

            if(/-[0-9]{3}-/.test(phoneStr)) {
                //00-000-0000
                maskingPhoneStr = str.replace(phoneStr, phoneStr.replace(/-[0-9]{3}-/g, "-***-"));
            } else if (/-[0-9]{4}-/.test(phoneStr)) {
                //00-0000-0000
                maskingPhoneStr = str.replace(phoneStr, phoneStr.replace(/-[0-9]{4}-/g, "-****-"));
            }
        } else {
            let phoneStr = str.length < 11 ? str.match(/\d{10}/gi) : str.match(/\d{11}/gi);

            if(this.checkNull(phoneStr) === true) {
                return str;
            }

            if (str.length > 10) {
                maskingPhoneStr = str.replace(phoneStr, phoneStr.toString().replace(/(\d{3})(\d{4})(\d{4})/gi, '$1****$3'));
            } else {
                maskingPhoneStr = str.replace(phoneStr, phoneStr.toString().replace(/(\d{3})(\d{3})(\d{4})/gi, '$1***$3'));
            }
        }

        return maskingPhoneStr;
    },

    name: function (str) {
        if(this.checkNull(str) === null || this.checkConfigEnable() === false) {
            return str;
        }

        const pattern = new RegExp('(?<=.{' + Math.floor((str.length / 2) + 1) + '}).', 'gi');
        return str.length > 2 ? str.replace(pattern, "*") : str.replace(/(?<=.)./gi, "*");
    },

    //주민등록번호
    licenseSI : function (str) {
        if (this.checkNull(str) === true || this.checkConfigEnable() === false) {
            return str;
        }

        let onlyNumberStr = str.replace(/[^0-9]/g, "");
        let licenseSILength = 13;

        if (onlyNumberStr !== licenseSILength) {
            return str;
        }

        return this.replaceText(str, 6, "*");
    },

    accountNumber: function (str) {
        if (this.checkNull(str) === true || this.checkConfigEnable() === false) {
            return str;
        }

        return this.replaceText(str, 6, "*");
    },

    birthDate: function (str) {
        if (this.checkNull(str) === true || this.checkConfigEnable() === false) {
            return str;
        }

        return this.replaceText(str, 4, "*");
    },

    replaceText: function (str, length, replaceStr) {
        if(this.checkConfigEnable() === false) {
            return str;
        }

        let replaceStrFullText = "";

        for(var i = 0; i < length; i++) {
            replaceStrFullText = replaceStrFullText.concat(replaceStr);
        }

        const pattern = new RegExp('.{' + length + '}$');
        return str.replace(pattern, replaceStrFullText);
    },
}

 

다른 분이 만든 코드에서 필요한 내용만 정리했다.

내가 참고한 사이트.

https://goddaehee.tistory.com/236

 

[JavaScript ] 개인정보 마스킹 함수(이름 마스킹, 이메일 마스킹, 휴대폰 번호 마스킹, 주민번호 마

[JavaScript ] 개인정보 마스킹 함수(이름 마스킹, 이메일 마스킹, 휴대폰 번호 마스킹, 주민번호 마스킹) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 개인정보 마스킹 하기 ] 입니다. : ) ▶ 개인

goddaehee.tistory.com