새소식

300x250
3. Database/쿼리_Func_Proc

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

  • -
728x90



사업자번호 유효성 체크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;

/

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

300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.