Top 31 마스킹 처리 All Answers

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 마스킹 처리 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://chewathai27.com/to team, along with other related topics such as: 마스킹 처리 마스킹 처리 뜻, 개인정보 마스킹 처리, 주민번호 마스킹 처리, 마스킹 처리 영어로, 도장 마스킹 처리, 이미지 마스킹 처리, ID 마스킹 처리, Java 마스킹 처리


마스킹액과 마스킹 미디엄의 차이 | masking fluid vs masking medium
마스킹액과 마스킹 미디엄의 차이 | masking fluid vs masking medium


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

  • Article author: goddaehee.tistory.com
  • Reviews from users: 21812 ⭐ Ratings
  • Top rated: 3.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [JavaScript ] 개인정보 마스킹 함수(이름 마스킹, 이메일 마스킹, 휴대폰 번호 마스킹, 주민번호 마스킹) – 사실 데이터를 프론트단에서 마스킹 처리하는건 선호하지 않지만, 꼭 프론트에서 한번더 마스킹 처리를 해야한다면 사용할 예정이다. 1. 이메일 마스킹. …
  • Most searched keywords: Whether you are looking for [JavaScript ] 개인정보 마스킹 함수(이름 마스킹, 이메일 마스킹, 휴대폰 번호 마스킹, 주민번호 마스킹) – 사실 데이터를 프론트단에서 마스킹 처리하는건 선호하지 않지만, 꼭 프론트에서 한번더 마스킹 처리를 해야한다면 사용할 예정이다. 1. 이메일 마스킹. [JavaScript ] 개인정보 마스킹 함수(이름 마스킹, 이메일 마스킹, 휴대폰 번호 마스킹, 주민번호 마스킹) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 개인정보 마스킹 하기 ] 입니다. : ) ▶ 개인정보 마스..
  • Table of Contents:

태그

관련글

댓글4

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

티스토리툴바

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

Read More

PDF 마스킹 하는 방법, 민감한 개인정보 삭제 하는 방법 :: 레티아 – OCR (문자인식) 솔루션 전문기업

  • Article author: retia.tistory.com
  • Reviews from users: 40362 ⭐ Ratings
  • Top rated: 4.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about PDF 마스킹 하는 방법, 민감한 개인정보 삭제 하는 방법 :: 레티아 – OCR (문자인식) 솔루션 전문기업 파인리더 PDF를 통해 해당 내용을 마스킹 처리하여 제거할 수 있습니다. PDF파일에서 드래그 만으로. 마스킹 처리가 가능합니다. …
  • Most searched keywords: Whether you are looking for PDF 마스킹 하는 방법, 민감한 개인정보 삭제 하는 방법 :: 레티아 – OCR (문자인식) 솔루션 전문기업 파인리더 PDF를 통해 해당 내용을 마스킹 처리하여 제거할 수 있습니다. PDF파일에서 드래그 만으로. 마스킹 처리가 가능합니다. 개인 정보 보호가 더욱 중요해진 요즘 어떻게 하면 PDF를 안전하게 공유할 수 있을까요? 문서 안에 이름, 연락처, 주민등록번호 등 민감한 개인 정보가 들어있거나 공유 하고 싶지 않은 내용들이 있으신가요? 파..
  • Table of Contents:
PDF 마스킹 하는 방법, 민감한 개인정보 삭제 하는 방법 :: 레티아 - OCR (문자인식) 솔루션 전문기업
PDF 마스킹 하는 방법, 민감한 개인정보 삭제 하는 방법 :: 레티아 – OCR (문자인식) 솔루션 전문기업

Read More

[JAVA] 정규식을 이용한 마스킹(정규표현식 마스킹 처리)

  • Article author: develop-sense.tistory.com
  • Reviews from users: 27548 ⭐ Ratings
  • Top rated: 3.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [JAVA] 정규식을 이용한 마스킹(정규표현식 마스킹 처리) 휴대폰번호 마스킹은 가운데 숫자 4자리 마스킹이고, ‘-‘(하이픈)이 들어오나 안들어오나, 숫자 길이와 형식이 맞으면 마스킹 처리가 됩니다. 3. 이메일 … …
  • Most searched keywords: Whether you are looking for [JAVA] 정규식을 이용한 마스킹(정규표현식 마스킹 처리) 휴대폰번호 마스킹은 가운데 숫자 4자리 마스킹이고, ‘-‘(하이픈)이 들어오나 안들어오나, 숫자 길이와 형식이 맞으면 마스킹 처리가 됩니다. 3. 이메일 … 안녕하세요. 소다맛사탕 입니다. 지난 포스팅 ‘[java] 휴대폰 번호, 계좌번호, 이름 마스킹(masking)’의 버전2, 정규식을 이용한 마스킹을 알아보겠습니다. ※ 정규식(또는 정규표현식) ; 텍스트 데이터 중에서 원..
  • Table of Contents:

특별한 일상

[JAVA] 정규식을 이용한 마스킹(정규표현식 마스킹 처리) 본문

티스토리툴바

[JAVA] 정규식을 이용한 마스킹(정규표현식 마스킹 처리)
[JAVA] 정규식을 이용한 마스킹(정규표현식 마스킹 처리)

Read More

마스킹(Masking) 기법의 이해와 응용

  • Article author: blog.daum.net
  • Reviews from users: 49139 ⭐ Ratings
  • Top rated: 4.9 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 마스킹(Masking) 기법의 이해와 응용 사실 이 기법에 대해서는 제가 이 블로그에서 올렸던 다른 게시물들, 특히 이미지 처리와 관련된 내용들에서 여러번 언급을 한 적은 있습니다. 하지만 … …
  • Most searched keywords: Whether you are looking for 마스킹(Masking) 기법의 이해와 응용 사실 이 기법에 대해서는 제가 이 블로그에서 올렸던 다른 게시물들, 특히 이미지 처리와 관련된 내용들에서 여러번 언급을 한 적은 있습니다. 하지만 … 마스킹(Masking) 기법은 어떤 배열을 대상으로 하여 배열 내 모든 값들 중 특정한 조건을 만족하는 것들만 선별하는 기법입니다. 주로 2차원 이미지 배열에 대하여 적용하는 경우가 많기는 하지만, 어차피 기법 자..
  • Table of Contents:
마스킹(Masking) 기법의 이해와 응용
마스킹(Masking) 기법의 이해와 응용

Read More

주민번호 마스킹 처리 및 그외 마스킹 처리

  • Article author: bangj.tistory.com
  • Reviews from users: 25718 ⭐ Ratings
  • Top rated: 3.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 주민번호 마스킹 처리 및 그외 마스킹 처리 개인정보 마스킹 함수. – 사실 데이터를 프론트단에서 마스킹 처리하는건 선호하지 않지만, 꼭 프론트에서 한번더 마스킹 처리를 해야한다면 사용할 … …
  • Most searched keywords: Whether you are looking for 주민번호 마스킹 처리 및 그외 마스킹 처리 개인정보 마스킹 함수. – 사실 데이터를 프론트단에서 마스킹 처리하는건 선호하지 않지만, 꼭 프론트에서 한번더 마스킹 처리를 해야한다면 사용할 … 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 const input = document.querySelector(‘input’); const ma..
  • Table of Contents:

진스

주민번호 마스킹 처리 및 그외 마스킹 처리 본문

티스토리툴바

주민번호 마스킹 처리 및 그외 마스킹 처리
주민번호 마스킹 처리 및 그외 마스킹 처리

Read More

[넘버스]개인정보 보호 마스킹 처리 방법

  • Article author: www.park3min.com
  • Reviews from users: 44105 ⭐ Ratings
  • Top rated: 4.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [넘버스]개인정보 보호 마스킹 처리 방법 [넘버스] 개인정보 보호 마스킹 처리 방법. Replace 함수를 사용하여 이름과 전화번호를 “*”로 처리하기. 안녕하세요. 빠르크 입니다. …
  • Most searched keywords: Whether you are looking for [넘버스]개인정보 보호 마스킹 처리 방법 [넘버스] 개인정보 보호 마스킹 처리 방법. Replace 함수를 사용하여 이름과 전화번호를 “*”로 처리하기. 안녕하세요. 빠르크 입니다. [넘버스] 개인정보 보호 마스킹 처리 방법 Replace 함수를 사용하여 이름과 전화번호를 “*”로 처리하기 안녕하세요. 빠르크 입니다. 넘버스 역시 엑셀과 마찬가지로 데이터를 처리하는 스프레드 시트 프로그램 입..파이널컷프로, 모션5, 프리미어프로, 애프터이펙트로
    디지털 영상콘텐츠를 만드는 방법과 템플릿들을 제공합니다
  • Table of Contents:
[넘버스]개인정보 보호 마스킹 처리 방법

Replace 함수를 사용하여 이름과 전화번호를 로 처리하기

티스토리툴바

[넘버스]개인정보 보호 마스킹 처리 방법
[넘버스]개인정보 보호 마스킹 처리 방법

Read More

Jackson 이용한 개인정보 마스킹처리

  • Article author: velog.io
  • Reviews from users: 27276 ⭐ Ratings
  • Top rated: 3.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Jackson 이용한 개인정보 마스킹처리 어떤 방식으로 마스킹할지 정의해줄 속성으로 MaskingType enum을 만든다. 어떻게 마스킹을 처리하는지를 맡는 Masking 클래스가 필요한다. 이 클래스에는 … …
  • Most searched keywords: Whether you are looking for Jackson 이용한 개인정보 마스킹처리 어떤 방식으로 마스킹할지 정의해줄 속성으로 MaskingType enum을 만든다. 어떻게 마스킹을 처리하는지를 맡는 Masking 클래스가 필요한다. 이 클래스에는 … 어노테이션을 이용해서 각 개인정보 성격에 맞춰서 마스킹 처리를 구현해야 했다. @MaskRequired 라는 어노테이션은 만들어주고, 마스킹 처리할 dto 필드에 이 어노테이션을 사용한다. MaskingType : 어떤 방식의 마스킹을 처리할지 정의해주는 속성 타입값에
  • Table of Contents:

@MaskRequired Annotation 생성

Maskingjava

Custom Serialize

Jackson 이용한 개인정보 마스킹처리
Jackson 이용한 개인정보 마스킹처리

Read More

Data Lake 플랫폼 아키텍처 – 윤선웅 – Google Sách

  • Article author: books.google.com.vn
  • Reviews from users: 41639 ⭐ Ratings
  • Top rated: 3.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Data Lake 플랫폼 아키텍처 – 윤선웅 – Google Sách Updating …
  • Most searched keywords: Whether you are looking for Data Lake 플랫폼 아키텍처 – 윤선웅 – Google Sách Updating 기업의 비즈니스 방향을 고려한 빅데이터 서비스 플랫폼을 설계하자! 글로벌 대형 기업들은 ‘디지털 전환(Digital Transformation)’을 핵심 현안으로 추진하고 있습니다. 이 과정에서 Data Lake 구축은 가장 중요한 과제 중 하나일 것입니다. 다른 기업들처럼 ‘람다 아키텍처’를 기반으로 하여 하둡 에코시스템을 활용해서 구축하면 되는 것일까요? 아니면 AWS 혹은 Azure의 Public Cloud 서비스를 활용하여 구축하면 되는 것일까요? 우리 기업의 비즈니스에 적합한 Data Lake 아키텍처는 무엇일까요? 이러한 ‘중요한 질문들’에 대한 해답을 얻고자 한다면 이 책을 반드시 읽어야 할 것입니다. ? 빅데이터 참조 아키텍처 (람다 vs. 카파) ? 빅데이터 솔루션 아키텍처 (Cloudera vs. AWS vs. Azure) ? Data Lake 아키텍처 설계 기본원칙 ? 단기와 장기 개념 아키텍처의 설계 ? 아키텍처 설계 시 주요 의사결정 사항 ? 구성요소별 상세 아키텍처 설계
  • Table of Contents:
Data Lake 플랫폼 아키텍처 - 윤선웅 - Google Sách
Data Lake 플랫폼 아키텍처 – 윤선웅 – Google Sách

Read More


See more articles in the same category here: https://chewathai27.com/to/blog.

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

반응형

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

안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 개인정보 마스킹 하기 ] 입니다. : )

▶ 개인정보 마스킹 함수

– 사실 데이터를 프론트단에서 마스킹 처리하는건 선호하지 않지만, 꼭 프론트에서 한번더 마스킹 처리를 해야한다면 사용할 예정이다.

1. 이메일 마스킹

– 1.1 @ 뒷부분 마스킹 처리 하지 않는 경우

ex)

원본 데이터 : [email protected]

변경 데이터 : ab**********@naver.com

– 1.2 @ 뒷부분도 마스킹 처리 하는 경우

ex)

원본 데이터 : [email protected]

변경 데이터 : ab**********@nav******

2. 휴대폰 번호 마스킹

ex1) 원본 데이터 : 01012345678, 변경 데이터 : 010****5678

ex2) 원본 데이터 : 010-1234-5678, 변경 데이터 : 010-****-5678

ex3) 원본 데이터 : 0111234567, 변경 데이터 : 011***4567

ex4) 원본 데이터 : 011-123-4567, 변경 데이터 : 011-***-4567

3. 주민등록 번호 마스킹 (Resident Registration Number, RRN Masking)

ex1) 원본 데이터 : 990101-1234567, 변경 데이터 : 990101-1******

ex2) 변경 데이터 : 9901011234567, 변경 데이터 : 9901011******

4. 이름 마스킹

ex1) 원본 데이터 : 갓댐희, 변경 데이터 : 갓댐*

ex2) 원본 데이터 : 하늘에수, 변경 데이터 : 하늘**

ex3) 원본 데이터 : 갓댐, 변경 데이터 : 갓*

let maskingFunc = { checkNull : function (str){ if(typeof str == “undefined” || str == null || str == “”){ return true; } else{ return false; } }, /* ※ 이메일 마스킹 ex1) 원본 데이터 : [email protected] 변경 데이터 : ab**********@naver.com ex2) 원본 데이터 : [email protected] 변경 데이터 : ab**********@nav****** */ email : function(str){ let originStr = str; let emailStr = originStr.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi); let strLength; if(this.checkNull(originStr) == true || this.checkNull(emailStr) == true){ return originStr; }else{ strLength = emailStr.toString().split(‘@’)[0].length – 3; // ex1) [email protected] => ab**********@naver.com // return originStr.toString().replace(new RegExp(‘.(?=.{0,’ + strLength + ‘}@)’, ‘g’), ‘*’); // ex2) [email protected] => ab**********@nav****** return originStr.toString().replace(new RegExp(‘.(?=.{0,’ + strLength + ‘}@)’, ‘g’), ‘*’).replace(/.{6}$/, “******”); } }, /* ※ 휴대폰 번호 마스킹 ex1) 원본 데이터 : 01012345678, 변경 데이터 : 010****5678 ex2) 원본 데이터 : 010-1234-5678, 변경 데이터 : 010-****-5678 ex3) 원본 데이터 : 0111234567, 변경 데이터 : 011***4567 ex4) 원본 데이터 : 011-123-4567, 변경 데이터 : 011-***-4567 */ phone : function(str){ let originStr = str; let phoneStr; let maskingStr; if(this.checkNull(originStr) == true){ return originStr; } if (originStr.toString().split(‘-‘).length != 3) { // 1) -가 없는 경우 phoneStr = originStr.length < 11 ? originStr.match(/\d{10}/gi) : originStr.match(/\d{11}/gi); if(this.checkNull(phoneStr) == true){ return originStr; } if(originStr.length < 11) { // 1.1) 0110000000 maskingStr = originStr.toString().replace(phoneStr, phoneStr.toString().replace(/(\d{3})(\d{3})(\d{4})/gi,'$1***$3')); } else { // 1.2) 01000000000 maskingStr = originStr.toString().replace(phoneStr, phoneStr.toString().replace(/(\d{3})(\d{4})(\d{4})/gi,'$1****$3')); } }else { // 2) -가 있는 경우 phoneStr = originStr.match(/\d{2,3}-\d{3,4}-\d{4}/gi); if(this.checkNull(phoneStr) == true){ return originStr; } if(/-[0-9]{3}-/.test(phoneStr)) { // 2.1) 00-000-0000 maskingStr = originStr.toString().replace(phoneStr, phoneStr.toString().replace(/-[0-9]{3}-/g, "-***-")); } else if(/-[0-9]{4}-/.test(phoneStr)) { // 2.2) 00-0000-0000 maskingStr = originStr.toString().replace(phoneStr, phoneStr.toString().replace(/-[0-9]{4}-/g, "-****-")); } } return maskingStr; }, /* ※ 주민등록 번호 마스킹 (Resident Registration Number, RRN Masking) ex1) 원본 데이터 : 990101-1234567, 변경 데이터 : 990101-1****** ex2) 원본 데이터 : 9901011234567, 변경 데이터 : 9901011****** */ rrn : function(str){ let originStr = str; let rrnStr; let maskingStr; let strLength; if(this.checkNull(originStr) == true){ return originStr; } rrnStr = originStr.match(/(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4]{1}[0-9]{6}\b/gi); if(this.checkNull(rrnStr) == false){ strLength = rrnStr.toString().split('-').length; maskingStr = originStr.toString().replace(rrnStr,rrnStr.toString().replace(/(-?)([1-4]{1})([0-9]{6})\b/gi,"$1$2******")); }else { rrnStr = originStr.match(/\d{13}/gi); if(this.checkNull(rrnStr) == false){ strLength = rrnStr.toString().split('-').length; maskingStr = originStr.toString().replace(rrnStr,rrnStr.toString().replace(/([0-9]{6})$/gi,"******")); }else{ return originStr; } } return maskingStr; }, /* ※ 이름 마스킹 ex1) 원본 데이터 : 갓댐희, 변경 데이터 : 갓댐* ex2) 원본 데이터 : 하늘에수, 변경 데이터 : 하늘** ex3) 원본 데이터 : 갓댐, 변경 데이터 : 갓* */ name : function(str){ let originStr = str; let maskingStr; let strLength; if(this.checkNull(originStr) == true){ return originStr; } strLength = originStr.length; if(strLength < 3){ maskingStr = originStr.replace(/(?<=.{1})./gi, "*"); }else { maskingStr = originStr.replace(/(?<=.{2})./gi, "*"); } return maskingStr; } } ◎ 사용 예시 ex) maskingFunc.email("[email protected]"); // "ab**********@nav******" maskingFunc.phone("0111234567"); // "011***4567" maskingFunc.phone("011-123-4567"); // "011-***-4567" maskingFunc.phone("01012345678"); // "010****5678" maskingFunc.phone("010-1234-5678"); // "010-****-5678" maskingFunc.rrn("9901011234567"); // "9901011******" maskingFunc.rrn("990101-1234567"); // "990101-1******" maskingFunc.name("갓댐"); // "갓*" maskingFunc.name("갓댐희"); // "갓댐*" maskingFunc.name("하늘에수"); // "하늘**" 반응형

[JAVA] 정규식을 이용한 마스킹(정규표현식 마스킹 처리)

반응형

안녕하세요. 소다맛사탕 입니다.

[java] 휴대폰 번호, 계좌번호, 이름 마스킹(masking)’의 버전2, 정규식을 이용한 마스킹을 알아보겠습니다. 지난 포스팅 ”의 버전2, 정규식을 이용한 마스킹을 알아보겠습니다.

※ 정규식(또는 정규표현식) ; 텍스트 데이터 중에서 원하는 조건과 일치하는 문자열을 찾아내기 위해 사용하는 것으로 미리 정의된 기호와 문자를 이용해서 작성한 문자열.

java.util.regex.Matcher과 java.util.regex.Pattern 을 사용해 정규식을 이용하여 마스킹 처리를 작성해 보겠습니다.

1. 이름 마스킹

// 이름 가운데 글자 마스킹 public static String nameMasking(String name) throws Exception { // 한글만 (영어, 숫자 포함 이름은 제외) String regex = “(^[가-힣]+)$”; Matcher matcher = Pattern.compile(regex).matcher(name); if(matcher.find()) { int length = name.length(); String middleMask = “”; if(length > 2) { middleMask = name.substring(1, length – 1); } else { // 이름이 외자 middleMask = name.substring(1, length); } String dot = “”; for(int i = 0; i 2) { return name.substring(0, 1) + middleMask.replace(middleMask, dot) + name.substring(length-1, length); } else { // 이름이 외자 마스킹 리턴 return name.substring(0, 1) + middleMask.replace(middleMask, dot); } } return name; }

이름 마스킹은 지난번 포스팅의 로직에서 한글 정규식 패턴만 가져올 수 있게 변경하였습니다.

마찬가지로 2글자 이상의 이름은 가운데 글자 마스킹. 외자는 끝자리만 마스킹.

2 . 휴대폰번호 마스킹

// 휴대폰번호 마스킹(가운데 숫자 4자리 마스킹) public static String phoneMasking(String phoneNo) throws Exception { String regex = “(\\d{2,3})-?(\\d{3,4})-?(\\d{4})$”; Matcher matcher = Pattern.compile(regex).matcher(phoneNo); if(matcher.find()) { String target = matcher.group(2); int length = target.length(); char[] c = new char[length]; Arrays.fill(c, ‘*’); return phoneNo.replace(target, String.valueOf(c)); } return phoneNo; }

휴대폰번호 마스킹은 가운데 숫자 4자리 마스킹이고, ‘-‘(하이픈)이 들어오나 안들어오나, 숫자 길이와 형식이 맞으면 마스킹 처리가 됩니다.

3. 이메일 마스킹

// 이메일 마스킹(앞3자리 이후 ‘@’전까지 마스킹) public static String emailMasking(String email) throws Exception { String regex = “\\b(\\s+)+@(\\s+.\\s+)”; Matcher matcher = Pattern.compile(regex).matcher(email); if(matcher.find()) { String target = matcher.group(1); int length = target.length(); if(length > 3) { char[] c = new char[length – 3]; Arrays.fill(c, ‘*’); return email.replace(target, target.substring(0, 3) + String.valueOf(c)); } } return email; }

이메일 마스킹은 앞3자리 제외, @전까지 마스킹 처리입니다. 이메일 형식이 올바르다면 마스킹 처리가 됩니다.

4. 계좌번호 마스킹

// 계좌번호 마스킹(뒤 5자리) public static String accountNoMasking(String accountNo) throws Exception { // 계좌번호는 숫자만 파악하므로 String regex = “(^[0-9]+)$”; Matcher matcher = Pattern.compile(regex).matcher(accountNo); if(matcher.find()) { int length = accountNo.length(); if(length > 5) { char[] c = new char[5]; Arrays.fill(c, ‘*’); return accountNo.replace(accountNo, accountNo.substring(0, length-5) + String.valueOf(c)); } } return accountNo; }

계좌번호 마스킹은 뒷 5자리 숫자를 마스킹 처리하고, 정규식 패턴에 상관없이 숫자 형식 패턴으로 이뤄져 있다면 상관없이 마스킹 처리가 됩니다.

계좌번호는 각 은행마다 자릿수가 다 틀려서 숫자 패턴만 이용했습니다.

5. 생년월일 마스킹

// 생년월일 마스킹(8자리) public static String birthMasking(String birthday) throws Exception { String regex = “^((19|20)\\d\\d)?([-/.])?(0[1-9]|1[012])([-/.])?(0[1-9]|[12][0-9]|3[01])$”; Matcher matcher = Pattern.compile(regex).matcher(birthday); if(matcher.find()) { return birthday.replace(“[0-9]”, “*”); } return birthday; }

생년월일 마스킹은 숫자 모두 마스킹 처리이고, ‘-‘(하이픈), ‘.'(점)이 들어오나 안들어오나 생년월일 8자리 형식이 올바르다면 마스킹 처리 됩니다.

6. 카드번호 마스킹

// 카드번호 가운데 8자리 마스킹 public static String cardMasking(String cardNo) throws Exception { // 카드번호 16자리 또는 15자리 ‘-‘포함/미포함 상관없음 String regex = “(\\d{4})-?(\\d{4})-?(\\d{4})-?(\\d{3,4})$”; Matcher matcher = Pattern.compile(regex).matcher(cardNo); if(matcher.find()) { String target = matcher.group(2) + matcher.group(3); int length = target.length(); char[] c = new char[length]; Arrays.fill(c, ‘*’); return cardNo.replace(target, String.valueOf(c)); } return cardNo; }

카드번호 마스킹은 가운데 8자리 숫자 마스킹 처리이고, 마찬가지로 ‘-‘(하이픈)이 포함된 카드 번호 숫자 형식이 올바르다면 마스킹 처리가 됩니다.

7. 주소 마스킹

// 주소 마스킹(신주소, 구주소, 도로명 주소 숫자만 전부 마스킹) public static String addressMasking(String address) throws Exception { // 신(구)주소, 도로명 주소 String regex = “(([가-힣]+(\\d{1,5}|\\d{1,5}(,|.)\\d{1,5}|)+(읍|면|동|가|리))(^구|)((\\d{1,5}(~|-)\\d{1,5}|\\d{1,5})(가|리|)|))([ ](산(\\d{1,5}(~|-)\\d{1,5}|\\d{1,5}))|)|”; String newRegx = “(([가-힣]|(\\d{1,5}(~|-)\\d{1,5})|\\d{1,5})+(로|길))”; Matcher matcher = Pattern.compile(regex).matcher(address); Matcher newMatcher = Pattern.compile(newRegx).matcher(address); if(matcher.find()) { return address.replaceAll(“[0-9]”, “*”); } else if(newMatcher.find()) { return address.replaceAll(“[0-9]”, “*”); } return address; }

위의 java 소스를 보시는것과 같이 주소는 정규식이 매우 험난합니다. 제가 이렇게까지 공들이진 못하구요. 우아한형제 기술노트에서 구주소, 신주소, 도로명 주소에 관련된 정규식이 있어 참조했습니다.

※ 참조(주소 마스킹 관련)

쉽고 재밌는 정규식 이야기

정규식 관련 패턴이나 설명을 들고 다시 돌아오겠습니다.

반응형

마스킹(Masking) 기법의 이해와 응용

마스킹(Masking) 기법은 어떤 배열을 대상으로 하여 배열 내 모든 값들 중 특정한 조건을 만족하는 것들만 선별하는 기법입니다. 주로 2차원 이미지 배열에 대하여 적용하는 경우가 많기는 하지만, 어차피 기법 자체는 배열의 차원을 가리지 않기 때문에 어떤 형태의 배열이든 적용 대상이 될 수 있습니다. 사실 이 기법에 대해서는 제가 이 블로그에서 올렸던 다른 게시물들, 특히 이미지 처리와 관련된 내용들에서 여러번 언급을 한 적은 있습니다. 하지만 오늘은 이 기법 자체에만 촛점을 맞추어서 그 개념 및 관련 예제들을 함께 소개해보고자 합니다.

우선 마스킹 기법의 원리에 대한 이해를 돕기 위하여 간단하게 1차원 배열에 대하여 적용을 해보겠습니다. 먼저 5개의 정수값들로 구성된 배열 img를 정의합니다. 그리고 img에 대하여 마스킹 기법을 적용하여 그 결과를 mask라는 배열로 얻게 되는데, 그 과정은 다음과 같습니다.

img = [80, 60, 75, 95, 50]

mask = img GE 80

PRINT, mask

위의 내용에서 “img GE 80″라고 적은 부분이 바로 마스킹 기법을 적용한 내용인데요. IDL에서 마스킹 기법을 적용하기 위해서는 이와 같이 대상 배열에 대하여 논리연산자를 사용해야 합니다. 논리연산자라는 것은 IF와 같은 조건형 구문에서 논리 판단을 위해 사용하는 것으로서 GT, GE, LT, LE, EQ, NE 등과 같은 단순 논리연산자와 AND, OR, ~ 등과 같은 복합 논리연산자가 있습니다. 참(True) 또는 거짓(False)으로 판별할 수 있는 논리식의 형태로 IF문에서 흔히 사용하지만, 이러한 문법을 위와 같이 적용하면 바로 마스킹 기법을 적용하게 되는 것입니다.

따라서 위의 두번째 줄의 내용의 의미는, img라는 배열의 모든 값들에 대하여 80보다 크거나 같다(Greater than or Equal)는 조건는 만족하는지 여부를 일일이 확인하고 그 결과를 mask라는 배열로 담으라는 것입니다. 판단의 결과는 1 또는 0으로 얻어집니다. 즉 조건을 만족하는 경우에는 1이 되고, 그렇지 않은 경우에는 0이 됩니다. 결국 mask라는 배열은 1 또는 0의 값들로 구성된 배열이 됩니다. 실제로 PRINT 명령에 의하여 출력된 내용은 다음과 같습니다.

1 0 0 1 0

이러한 결과가 얻어진 이유는 배열 img의 값들을 보면 쉽게 알 수 있습니다. 즉 80보다 크거나 같다른 만족하는 값들은 80과 95이고, 이 값들의 위치가 첫번째 및 네번째이기 때문입니다. 다음 그림은 여기까지의 과정을 도식적으로 나타낸 것입니다.

마스킹 기법에서 논리연산자를 사용하는 방식은 IF 구문을 사용할 때와 동일합니다. 즉 그 결과가 참 또는 거짓으로 나올 수 있는 논리식이면 되고, 그 형태는 단순 논리식이든 복합 논리식 상관이 없습니다. 그러므로 다음과 같은 방식도 가능합니다.

mask = img GT 70 AND img LT 90

PRINT, mask

즉 70보다 크고 90보다 작다는 조건을 만족하는 경우를 선별해내기 위한 마스킹 기법의 적용 사례입니다. 그리고 그 결과는 다음과 같습니다.

1 0 1 0 0

일단 이 정도면 마스킹 기법의 원리에 대해서는 충분히 설명이 되었을 것 같습니다. 이번에는 2차원 배열을 대상으로 하는 경우에 대해서도 예제와 함께 살펴보겠습니다. 어차피 차원만 다를 뿐 기본적인 원리는 동일합니다. 예제로 사용할 2차원 데이터는 JPG 파일로부터 읽어오겠습니다. 이 파일은 아래 첨부합니다.

bw0406.jpg 0.12MB

그리고 파일을 읽어서 img라는 2차원 배열로 얻는 과정은 다음과 같습니다.

file = ‘bw0406.jpg’

READ_JPEG, file, img

HELP, img

PRINT, MIN(img), MAX(img)

여기서 HELP 및 PRINT에 의하여 출력된 내용을 보면, img는 1024×768의 구조를 갖는 바이트(Byte)형 배열이고 배열 내 값들의 범위는 0~255입니다. 먼저 원본 데이터인 img를 표출해본다면 그 과정은 다음과 같습니다.

sz = SIZE(img, /DIM)

win0 = WINDOW(DIMENSIONS=sz, /NO_TOOLBAR)

i0 = IMAGE(img, MARGIN=0, /CURRENT)

여기서는 SIZE 함수를 사용하여 배열 img의 가로 및 세로 방향 크기를 얻고 이를 그래픽 창의 크기로 반영하였습니다. 그리고 IMAGE 함수를 사용하여 표출할 때 MARGIN의 값을 0으로 설정함으로써 그래픽 창 내에서 이미지 표출시 여백이 생기지 않도록 하였습니다. 표출된 모습은 다음과 같습니다.

이제 배열 img에 대하여 마스킹 기법을 적용해봅시다. 그 과정은 다음과 같습니다.

mask = img GT 90

HELP, mask

PRINT, MIN(mask), MAX(mask)

여기서 “img GT 90″이라는 부분이 마스킹 기법에 해당되며, img 배열 내 모든 값들에 대하여 90보다 큰가 여부를 일일이 확인하여 그 결과를 mask라는 배열로 얻은 것입니다. HELP 및 PRINT에 의하여 출력된 내용은 다음과 같습니다.

MASK BYTE = Array[1024, 768]

0 1

이와 같이 마스킹 처리의 결과 배열을 보면 차원과 크기 모두 원본 데이터와 동일하지만 내부적으로는 0 또는 1의 값들만 존재하는 바이트형 배열이 됩니다. 그러면 결과의 모습이 어떤가를 보기 위하여 다음과 같은 과정에 의하여 별도의 그래픽창을 띄우고 mask를 표출해봅시다.

win1 = WINDOW(DIMENSIONS=sz, /NO_TOOLBAR)

i1 = IMAGE(mask*1, MARGIN=0, /CURRENT)

그런데 여기서 IMAGE 함수의 내용을 잘 보면 표출의 대상인 배열 mask에 정수 1을 곱했는데요. 원래 mask 자체는 바이트형 배열인데, IMAGE 함수의 대상이 바이트형 배열인 경우에는 값을 그대로 색상으로 반영합니다. 즉 0과 1의 값이 그대로 색상값 0과 1로 대응되어 표출되는데, 이렇게 되면 컬러테이블을 구성하는 256개의 색상들 중 맨 앞의 0번과 1번에 해당되는 두 색상이 사용됩니다. 그레이스케일의 색상들로 구성된 디폴트 컬러테이블에서는 0과 1 모두 완전 검정색에 가까우므로 육안으로는 두 색상의 구분이 거의 불가능합니다. 그런데 IMAGE 함수의 대상 배열의 자료형이 바이트형이 아닌 경우에는 최소값부터 최대값까지의 범위를 무조건 0~255의 색상값들로 대응시키는 바이트스케일링(Byte-Scaling)이 적용됩니다. 즉 배열값의 범위가 0~1인 경우 색상은 0~255로 대응되므로, 배열값 0은 색상값 0으로 그리고 배열값 1은 색상값 255로 표현됩니다. 그러면 0과 1이 각각 검정색과 흰색으로 표현되기 때문에 육안으로도 두 값을 서로 구분하여 보기가 쉬워집니다. 이러한 처리를 하기 위하여 일부러 mask*1로 표시한 것입니다. 즉 mask 자체는 바이트형이지만 mask*1은 정수형이 된다는 점을 이용한 하나의 요령이라고 보면 됩니다. 어쨌든 표출된 모습은 다음 그림과 같습니다.

즉 원본 배열인 img 내에서 90보다 큰 화소들은 mask 배열 내에서의 값이 1이 되고 그림상에서는 흰색으로 보입니다. 그리고 원본 배열인 img 내에서 나머지 화소들은 mask 배열 내에서의 값이 0이 되고 그림상에서는 검정색으로 보입니다. 이러한 방식으로 특정한 조건을 만족하는 것들과 그렇지 않은 것들을 이분법적으로 구분할 수 있게 됩니다. 바로 이것이 바로 마스킹(Masking) 기법입니다. 그리고 마스킹의 결과를 얻는데서만 그치지 않고 다음과 같이 추가적으로 응용하는 것도 가능합니다.

masked_img = img * mask

HELP, masked_img

PRINT, MIN(masked_img), MAX(masked_img)

즉 이와 같이 마스킹의 결과 배열인 mask를 원본 데이터 배열인 img와 곱하는 것입니다. 이렇게 하여 얻어지는 결과 배열인 masked_img의 배열 값들은 원본 데이터 값에 1이 곱해진 부분과 0이 곱해진 부분들로 나눠지게 됩니다. 그러면 1이 곱해진 부분은 원본 데이터 값이 그대로 살아남는 반면, 0이 곱해진 부분은 그냥 0이 되어버립니다. HELP 및 PRINT에 의하여 출력된 내용은 다음과 같습니다.

MASKED_IMG BYTE = Array[1024, 768]

0 255

이와 같이 masked_img는 바이트형 배열이고 값 범위는 0~255가 됩니다. 이제 masked_img를 표출해서 그 모습을 직접 봅시다. 그 과정은 다음과 같습니다.

win2 = WINDOW(DIMENSIONS=sz, /NO_TOOLBAR)

i2 = IMAGE(masked_img, MARGIN=0, /CURRENT)

그리고 표출된 모습은 다음과 같습니다.

이와 같이 마스킹의 결과인 mask에서 1이었던 부분은 원본 데이터의 모습이 그대로 살아있는 반면 0이었던 부분은 완전히 죽어버린 것을 확인할 수 있습니다. 물론 이것은 마스킹의 결과를 응용하는 하나의 예입니다. 마스킹의 결과는 후속 처리 과정에서 목적에 따라 얼마든지 다양한 방법으로 활용할 수 있다는 점을 염두에 두시면 좋을 것 같습니다.

So you have finished reading the 마스킹 처리 topic article, if you find this article useful, please share it. Thank you very much. See more: 마스킹 처리 뜻, 개인정보 마스킹 처리, 주민번호 마스킹 처리, 마스킹 처리 영어로, 도장 마스킹 처리, 이미지 마스킹 처리, ID 마스킹 처리, Java 마스킹 처리

Leave a Comment