본문 바로가기
4. Database/4_1 쿼리_Func_Proc

[Oracle] 사업자번호 유효성 체크 Function (오라클)

by 갓대희 2017. 11. 29.
반응형



사업자번호 유효성 체크Function



1. 먼저 정규식을 통해 특수문자 제거


2. 자리수 체크 하여 10자리가 아닌경우 오류


3. 유효성 체크에서 걸러져도 오류



PARAMETER : 체크할 사업자번호

RETURN : 문자열 'FALSE' 또는 'TRUE'



---------------------------------------------------------------------------------------------------------------------------------------


CREATE OR REPLACE FUNCTION FCHECK_BIZ_NO( p_bizno IN VARCHAR2)


RETURN VARCHAR2 IS

v_ret_val VARCHAR2(30);

v_bizno VARCHAR2(30);

v_calc NUMBER := 0;


BEGIN

IF p_bizno IS NULL THEN RETURN NULL; END IF;


SELECT regexp_replace(Regexp_replace(trim(lower(p_bizno)),'[^a-z,A-Z,0-9]',''),'[[:space:]]{1,}',' ')

INTO v_bizno

FROM dual;


IF ((length(v_bizno) != 10) OR (v_bizno IS NULL)) then RETURN 'FALSE'; END IF;


SELECT CASE WHEN CHK_YN = 'Y' THEN 'TRUE' ELSE 'FALSE' END INTO v_ret_val

FROM

  (SELECT DECODE(CHKSUM,0,DECODE(CHKSUM,B.B1,'Y','N'),DECODE(10-CHKSUM,B.B1,'Y','N')) AS CHK_YN

  FROM

    (SELECT A.* ,

      MOD( A1*1+A2*3+A3*7+A4*1+A5*3+A6*7+A7*1+A8*3+A9*5+TRUNC((A9*5)/10,0) ,10) AS CHKSUM

    FROM

      (SELECT v_bizno,

        SUBSTR(v_bizno , 1, 1) A1 ,

        SUBSTR(v_bizno , 2, 1) A2 ,

        SUBSTR(v_bizno , 3, 1) A3 ,

        SUBSTR(v_bizno , 4, 1) A4 ,

        SUBSTR(v_bizno , 5, 1) A5 ,

        SUBSTR(v_bizno , 6, 1) A6 ,

        SUBSTR(v_bizno , 7, 1) A7 ,

        SUBSTR(v_bizno , 8, 1) A8 ,

        SUBSTR(v_bizno , 9, 1) A9 ,

        SUBSTR(v_bizno , 10, 1) B1 --유효성 체크자리

      FROM DUAL

      )A

    ) B

  );


RETURN v_ret_val;

END;

/

----------------------------------------------------------------------------------------------------------------------------------------

반응형

댓글0