방법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
[출처] 주민번호 체크 저장 프로시저|작성자 필립박
'데이터베이스 > SQL Server' 카테고리의 다른 글
중복되는 데이터중 임의의 한개(여기선 idx 최대값)만 남기고 삭제 (0) | 2008.04.29 |
---|---|
분산 쿼리를 하기 위한 Linked Server 구성하기 (0) | 2008.04.29 |
E-Mail 주소 검증 함수 (0) | 2008.04.29 |
숫자를 문자로 나타내는 함수(숫자=>한글) (0) | 2008.04.29 |
숫자를 문자로 나타내는 함수(숫자=>영문) (0) | 2008.04.29 |