본문 바로가기

Database

04월10일 이론 및 실습 Fuction-실습문제

F_PASSWDCHECK('암호');

 

1. 암호의 길이는 최소 7글자이고 최대 10글자이다.

2. 암호속에는 최소한 영문자,숫자,특수기호가 1 글자 이상 포함되어야 한다.

3. 결과값이 옳바르다면 RETURN 값으로 1

4. 결과값이 올바르지 않다면

암호길이의 불이행 : RETURN 값으로 2

문자(/숫자/특수)기호 조합의 불이행 : RETURN 값으로 3

출력하도록 하는 함수를 생성하라. */

 

--이러한 함수를 생성하라.

F_PASSWDCHECK

 

CREATE OR REPLACE FUNCTION F_PASSWDCHECK

(V_PASSWD IN VARCHAR2)

RETURN NUMBER

IS

 

V_RESULT NUMBER;

V_NUM NUMBER;

V_STR NUMBER:=0; --초기값은 0, 영문자가 사용되면 1

V_SU NUMBER:=0; --초기값은 0, 숫자가 사용되면 1

V_SPECIAL NUMBER:=0; --초기값은 0, 특수문자가 사용되면 1

 

BEGIN

IF LENGTH(V_PASSWD) <7 or LENGTH(V_PASSWD) >10

THEN V_RESULT:=2;

 

ELSE

 

FOR i IN 1..LENGTH(V_PASSWD) LOOP

 

V_NUM:=ASCII(SUBSTR(V_PASSWD,i,1));

 

IF (V_NUM >=65 AND V_NUM <=90) OR --대문자

(V_NUM >=97 AND V_NUM <=122) --소문자

THEN V_STR:=1;

 

ELSIF (V_NUM >=48 AND V_NUM <=57 ) --숫자

THEN V_SU:=1;

 

ELSIF (V_NUM >=33 AND V_NUM <=47 ) OR

(V_NUM >=58 AND V_NUM <=64 ) OR

(V_NUM >=91 AND V_NUM <=96 ) OR

(V_NUM >=123 AND V_NUM <=126 )

THEN V_SPECIAL:=1;

END IF;

 

END LOOP;

 

IF (V_STR+V_SU+V_SPECIAL)=3 THEN

V_RESULT:=1;

 

ELSE V_RESULT:=3;

 

END IF;

 

END IF;

 

RETURN V_RESULT;

END;

/

 

함수가 제대로 작동하는지 TEST 하기 위해 아래와 같이 임의의 PassWd들을 입력해보면,

SELECT F_PASSWDCHECK('DBA007$'),

F_PASSWDCHECK('d7$'),

F_PASSWDCHECK('abcdef$'),

F_PASSWDCHECK('abcdef7'),

F_PASSWDCHECK('abcdsdfadsfassa#3')

from dual;

 

그림과 같이 올바른 값에는 1,

길이를 만족치 못한 값에는 2,

문자조합을 만족치 못한 값에는 3 출력되어지는 것을 있다.