728x90

방법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

728x90

CREATE FUNCTION [dbo].[ValidateEmail]
(
 @Text varchar(255)
)
RETURNS BIT
AS


    BEGIN
          DECLARE @Letters VARCHAR(255)
          DECLARE @Index INT
          DECLARE @Max INT
          DECLARE @Pass BIT
          SET @Letters = ' abcdefghijklmnopqrstuvwxyz01234567890_-.@'
          SET @Max = LEN(@Text)
          SET @Index = 0
          SET @Pass = 1


          IF @Text IS NULL OR NOT @Text LIKE '_%@__%.__%' RETURN(0)
          WHILE @Index < @Max AND @Pass = 1
              BEGIN
                   SET @Index = @Index + 1
                   IF NOT @Letters LIKE '%' + SUBSTRING(@Text, @Index, 1) + '%' SET @Pass = 0
              END
     RETURN(@Pass)
END

+ Recent posts