방법1)
/*
MS-SQL 서버에서는 에러가 나는거 같아서 조금 수정했습니다.
^^* 좋은 정보 감사합니다..
*/
CREATE PROC jumin_chk
@sjumin CHAR(13)
AS
DECLARE @i INT, @nDigit INT, @nSum INT, @nLateDigit INT
SET @i=0
SET @nSum=0
WHILE @i < 12
BEGIN
SET @nDigit = CAST (substring (@sjumin, @i+1, 1) AS INT)
IF (@i >= 8)
SET @nSum = @nSum + @nDigit * ((@i + 1) % 9 +2)
ELSE
SET @nSum = @nSum + @nDigit * ((@i + 1) % 9 +1)
SET @i = @i + 1
END
SET @nDigit = CAST(substring (@sjumin, @i+1, 1) AS INT)
SET @nLateDigit = (11 - @nSum % 11) % 10
IF @nDigit = @nLateDigit
print '주민번호 정상'
ELSE
print '주민번호 오류'
방법2)
/*
작성자 : SQL
작성일 : 2004.06.18
내 용 :
주민번호 체크
실 행 :
EXEC JUMIN_NO_CHK '1234561234567'
*/
CREATE PROC dbo.JUMIN_NO_CHK
(
@sjumin CHAR(13)
)
AS
BEGIN
DECLARE @i INT
,@nDigit INT
,@nSum INT
,@nLateDigit INT
-- 여기서 날짜 체크먼저.. ^^
IF ISDATE(LEFT(@sjumin,6)) = 1
BEGIN
SET @i=0
SET @nSum=0
WHILE @i < 12
BEGIN
SET @nDigit = CAST(substring(@sjumin, @i+1, 1) AS INT)
IF (@i >= 8)
SET @nSum = @nSum + @nDigit * ((@i + 1) % 9 +2)
ELSE
SET @nSum = @nSum + @nDigit * ((@i + 1) % 9 +1)
SET @i = @i + 1
END
SET @nDigit = CAST(substring(@sjumin, @i+1, 1) AS INT)
SET @nLateDigit = (11 - @nSum % 11) % 10
IF @nDigit <> @nLateDigit
print '주민번호 오류'
ELSE
print '주민번호 정상'
END
ELSE
print '주민번호 오류'
END