Oracle/SQL2012. 4. 30. 09:41

정규식으로 주민등록번호와 휴대폰 번호의 마스킹해보자.

 

주민등록번호의 뒷 6자리를 마스킹한다. 22행을 보면 월말일자 처리가 완벽하지 않다. 완전한 월말일자 처리를 위해서는 좀 더 정교한 정규식이 필요하다.  

WITH t1 AS
     (SELECT     CASE LEVEL
                     WHEN 1 THEN '7908221123456'
                     WHEN 2 THEN '7913221123456'
                     WHEN 3 THEN '7908321123456'
                     WHEN 4 THEN '7908225123456'
                     WHEN 5 THEN '7902311123456'
                     WHEN 6 THEN '790822-1123456'
                 END AS c1
            FROM DUAL
      CONNECT BY LEVEL <= 6)
SELECT REGEXP_REPLACE (REGEXP_REPLACE (a.c1, '[^0-9]'),
       '^([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])([1-4])([0-9]{6})$', '\1\2\3\4******') AS c1
  FROM t1 a;

C1           
-------------
7908221******
7913221123456
7908321123456
7908225123456
7902311******
7908221******

6 행이 선택되었습니다.

 

아래 쿼리는 휴대폰 번호 가운데 3자리 또는 4자리를 마스킹한다. 20행의 012는 정제 대상이다.

WITH t1 AS
     (SELECT     CASE LEVEL
                     WHEN 1 THEN '01012345678'
                     WHEN 2 THEN '0101235678'
                     WHEN 3 THEN '010125678'
                     WHEN 4 THEN '01212345678'
                     WHEN 5 THEN '010-1234-5678'
                 END AS c1
            FROM DUAL
      CONNECT BY LEVEL <= 5)
SELECT REGEXP_REPLACE (REGEXP_REPLACE (a.c1, '[^0-9]'),
                       '^(010|011|016|017|019)([0-9]{3,4})([0-9]{4})$', '\1****\3') AS c1
  FROM t1 a;

C1         
-----------
010****5678
010****5678
010125678  
01212345678
010****5678

5 행이 선택되었습니다.


'Oracle > SQL' 카테고리의 다른 글

데이터 계산 순서 구하기  (0) 2012.05.11
주별 집계  (0) 2012.05.09
다중 행을 문자열로 집계  (0) 2012.04.16
구분자 포함 값을 행으로 분리  (0) 2012.04.13
연속된 공백을 하나의 공백으로 변경  (0) 2012.04.12
Posted by 정희락_