프로그램/Mssql

MS-SQL 주민번호 체크 쿼리

워누별 2024. 1. 23. 11:49
반응형

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[uf_jNo_Check](@number char(13))
RETURNS char(13)
BEGIN 
--Set Nocount on 
DECLARE @returnValue as char(1), @value int
SELECT @returnValue='0'

IF @number 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 @returnValue

SELECT @value=0
SELECT @value=@value+substring(@number,1,1)*2
SELECT @value=@value+substring(@number,2,1)*3
SELECT @value=@value+substring(@number,3,1)*4
SELECT @value=@value+substring(@number,4,1)*5
SELECT @value=@value+substring(@number,5,1)*6
SELECT @value=@value+substring(@number,6,1)*7
SELECT @value=@value+substring(@number,7,1)*8
SELECT @value=@value+substring(@number,8,1)*9
SELECT @value=@value+substring(@number,9,1)*2
SELECT @value=@value+substring(@number,10,1)*3
SELECT @value=@value+substring(@number,11,1)*4
SELECT @value=@value+substring(@number,12,1)*5

if substring(@number,7,1) < 5
BEGIN
--내국인 체크
SELECT @value=(11-(@value%11))%10
IF (convert(char(1),@value)=substring(@number,13,1) 
and isdate(convert(char(2),(((convert(int,substring(@number,7,1))+1)%10)/2+18))+substring(@number,1,6))=1 
and substring(@number,7,1) in ('0','1','2','3','4','9')
and len(@number)=13)
BEGIN
SELECT @returnValue='1'
END
END


if substring(@number,7,1) > 4
BEGIN
--재외국인 체크
SELECT @value=(11-(@value%11))
if (substring(@number,8,1)*10+substring(@number,9,1))%2 <> 0
Return @returnValue+substring(@number,6,1)

if substring(@number,12,1)<>6 and substring(@number,12,1)<>7 and substring(@number,12,1)<>8 and substring(@number,12,1)<>9
Return @returnValue

if @value >= 10
select @value=@value-10

select @value=@value+2

if @value >= 10
select @value=@value-10

if convert(char(1),@value)<>substring(@number,13,1)
Return @returnValue

BEGIN
SELECT @returnValue='1'
END
END


RETURN @returnValue

--Set nocount Off
END

반응형