[MSSQL] 주민등록번호 유효성 체크

2014. 3. 19. 18:03IT

요즘 한창 이슈가 되고 있는 개인정보보호중 가장 중요한 주민등록번호의 유효성을 체크하는 함수이다.

과거에 많이 사용했던 함수로 지금도 간간히 사용하고 있다. 주민등록번호 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