주민번호 유효성 체크 1 1 3,433

by 손님 [SQL Query] [2011.10.31 11:17:07]



여러모로 많은 도움을 받고 있는 초보 개발자입니다.

다름이 아니라 주민번호 컬럼을 가져와서 유효성 검사를 하고자 하는데요 쿼리로요..
오라클 함수로 처리해서 결과값을 가져와야 할것 같은데요.. 예를 들어서 주민번호가 유효하면 1,
그렇지 않으면 2 이런식으로 return값을 가져오는 함수를 만들고 싶습니다.

답변 좀 부탁드릴께요...
by xm [2011.10.31 13:02:37]
예전에 만들어본겁니다.

CREATE OR REPLACE FUNCTION FUNC_NUM_CHK
(
isCSNUM IN STRING --대상번호
) RETURN STRING
IS
v_chkBit NUMBER := TO_NUMBER(SUBSTR(isCSNUM,13,1));
v_chk NUMBER := 0;
BEGIN
-- 주민번호
FOR cnt IN 1..12 LOOP
v_chk := v_chk + (SUBSTR(isCSNUM,cnt,1) * (MOD(cnt-1,8) + 2));
END LOOP;

-- 외국인일 경우
IF SUBSTR(isCSNUM,7,1) IN ('5','6','7','8') THEN
IF MOD(TO_NUMBER(SUBSTR(isCSNUM,8,2)),2) != 0 THEN
RETURN 'N';
END IF;

IF SUBSTR(isCSNUM,12,1) NOT IN ('6','7','8','9') THEN
RETURN 'N';
END IF;

v_chk := MOD(11 - MOD(v_chk,11),10);
v_chk := v_chk + 2;
v_chk := MOD(v_chk,10);
ELSE
v_chk := MOD(11 - MOD(v_chk,11),10);
END IF;

IF v_chkBit = v_chk THEN
RETURN 'Y';
ELSE
RETURN 'N';
END IF;
END;
/

return값은 Y/N으로 넘겨요..
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입