본문 바로가기

Server Oriented/DB-Oracle

오라클 lpad 를 사용하여 이름 중간이나 뒤 일정부분 가리기(마스킹)

경품추첨 내용을 발표하려고 이름이나 아이디를 화면에 노출하려 하는데,

보안상 일정 부분을 가려야 한다 할 때 어떻게 해야 할까요..?


방법이야 여러가지 있겠지만, 여기는 lpad 함수를 사용해 보려고 합니다.

lpad(<원래문자>, <맞출 자릿수>, <빈 자리에 사용한 물자>) 라고 보면 되겠는데요..


자, '홍길동' 에서 가운데 글자만 가린다고 하고, 칼럼 이름이 name 이라면..

substr(name,1,1) || lpad('*',length(name)-2,'*') || substr(name, length(name), 1)

substr(name,1,1) 는 맨 앞 1자리를 추출.

lpad('*',length(name)-2,'*') 는 첫번째 파라미터 '*' 문자를 사용하되,

length(name)-2 자릿수에 맞추고,

빈 공간은 세번째 파라미터인 '*' 문자를 사용하여 채운다.

substr(name, length(name), 1) 는 맨 뒤 1자리를 추출.

상기와 같이 한다면, name 을 '홍길동전' 이라고 했을때 결과로 '홍**전' 이 나오게 됩니다.


에또.. 'tistory' 라는 아이디 맨 뒤 3자리를 가린다고 할 때, 칼럼 이름이 id 라면..

substr(id,1,length(id)-3)||lpad('*',3,'*')

substr(id,1,length(id)-3) 은 맨 앞에서부터 문자열을 취하되 문자열 길이에서 '***' 로 대체할 갯수를 빼고 추출.
lpad('*',3,'*') 는 '*' 문자를 3번 반복하여 사용..
결과는.. 'tist***' 가 됩니다.

.Fine.