2014. 3. 19. 18:03ㆍIT
요즘 한창 이슈가 되고 있는 개인정보보호중 가장 중요한 주민등록번호의 유효성을 체크하는 함수이다.
과거에 많이 사용했던 함수로 지금도 간간히 사용하고 있다. 주민등록번호 13자리('-' 하이픈 없이)를 입력하면
유효성 확인 되면 : 1, 실패: 0을 리턴하게 된다.
[유효성 확인]
[유효성 실패]
[함 수]
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE FUNCTION [dbo].[fn_RES_NO_CHK](@NUM CHAR(13))
RETURNS CHAR(13)
BEGIN
DECLARE @RETURN CHAR(1), @VALUE INT
SELECT @RETURN='0'
IF @NUM NOT LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
RETURN @RETURN
SELECT @VALUE=0
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,1,1)*2
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,2,1)*3
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,3,1)*4
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,4,1)*5
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,5,1)*6
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,6,1)*7
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,7,1)*8
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,8,1)*9
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,9,1)*2
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,10,1)*3
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,11,1)*4
SELECT @VALUE=@VALUE+SUBSTRING(@NUM,12,1)*5
SELECT @VALUE=(11-(@VALUE%11))%10
IF(CONVERT(CHAR(1),@VALUE)=SUBSTRING(@NUM,13,1)
AND ISDATE(CONVERT(CHAR(2),(((CONVERT(INT,SUBSTRING(@NUM,7,1))+1)%10)/2+18))+SUBSTRING(@NUM,1,6))=1
AND SUBSTRING(@NUM,7,1) IN ('0','1','2','3','4','9') AND LEN(@NUM)=13)
BEGIN
SELECT @RETURN='1'
END
RETURN @RETURN
END
GO
'IT' 카테고리의 다른 글
[MSSQL] 숫자만 뽑아내는 함수 (0) | 2014.03.21 |
---|---|
[MSSQL] 0으로 나누기 오류가 발생 (0) | 2014.03.20 |
[MSSQL] 필드에 싱글쿼테이션 제거 (0) | 2014.03.19 |
[MSSQL] 날짜에 의한 요일 표기 함수 (0) | 2014.03.19 |
[ASP] 오늘(현재)일자 (0) | 2014.03.19 |