출처 https://gent.tistory.com/136
아래의 함수는 내국인과 외국인 주민등록번호의 유효성을 판단하여 0 (주민번호 아님), 1 (주민번호) 을 리턴한다.
<사용자 함수 생성>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | CREATE OR REPLACE FUNCTION FT_IS_JUMIN_VALID (IN_JUMIN_NO IN VARCHAR2) RETURN INTEGER IS WK_JUMIN_NO VARCHAR2(13); WK_CHECK_BIT VARCHAR2(12) := '234567892345'; --검증값 WK_TOTAL NUMBER := 0; WK_RESULT NUMBER := 0; WK_RETURN INTEGER := 0; BEGIN WK_JUMIN_NO := REPLACE(TRIM(IN_JUMIN_NO), '-', ''); FOR i IN 1..12 LOOP WK_TOTAL := WK_TOTAL + TO_NUMBER(SUBSTR(WK_JUMIN_NO, i, 1)) * TO_NUMBER(SUBSTR(WK_CHECK_BIT, i, 1)); END LOOP; IF TO_NUMBER(SUBSTR(WK_JUMIN_NO, 7, 1)) IN (5, 6, 7, 8) THEN --외국인 WK_RESULT := MOD(13 - (MOD(WK_TOTAL, 11)), 10); ELSE --내국인 WK_RESULT := MOD(11 - (MOD(WK_TOTAL, 11)), 10); END IF; IF TO_NUMBER(SUBSTR(WK_JUMIN_NO,13,1)) = WK_RESULT THEN WK_RETURN := 1; ELSE WK_RETURN := 0; END IF; RETURN WK_RETURN; EXCEPTION WHEN OTHERS THEN RETURN 0; END; | cs |
<사용예시>
- 컬럼에 주민등록번호 형식의 문자만 있을때 (12345612345678 or 123456-1234567)
1 2 3 | SELECT * FROM USERS WHERE FT_IS_JUMIN_VALID(SSN) = 1 --0:가짜 주민번호, 1:정상 주민번호 | cs |
- 일반 텍스터 컬럼 (비고 등)에 주민등록번호 형식의 문자가 포함되어 있을때
정규식을 이용하여 문자를 추출하여 함수에 적용한다
( [0-9]{6}-[0-9]{7} : (-)포함 13자리 숫자, [0-9]{13} : 13자리 숫자 )
1 2 3 4 | SELECT REGEXP_SUBSTR(REMARK,'[0-9]{6}-[0-9]{7}'), A.* FROM USERS A WHERE FT_IS_JUMIN_VALID(REGEXP_SUBSTR(REMARK,'[0-9]{6}-[0-9]{7}')) = 1 |
'닷컴's_열공 > Database' 카테고리의 다른 글
법인등록번호,사업자,주민등록번호 유효성체크 (0) | 2019.02.07 |
---|---|
mybatis lt gt lte gte 정리 (0) | 2019.01.28 |
SQL 세로를 가로로 만들기 참조... (0) | 2017.07.24 |
[ORACLE]ORACLE에서 UPDATE JOIN 사용 및 MERGE INTO 로 대체방법 (0) | 2015.08.28 |
유용한 plsql 정보들. (0) | 2015.06.26 |