SunnyDB

MS-SQL 체크디지트 생성함수-return all 본문

MS-SQL Tip

MS-SQL 체크디지트 생성함수-return all

Ksunny 2018. 8. 17. 18:05

ALTER FUNCTION [dbo].[to_checkdigita] (@v_pos_code varchar(20)) 

RETURNS varchar(20)

as 

begin

   declare @v_checkdigit varchar(20),

                @v_pos_code2 varchar(20),

                @v_idx integer,

                @v_sum integer,

                @v_mok integer,

                @nLoop integer


   select @v_idx = 0, @v_sum = 0, @v_mok = 0, @nLoop = 0


   select @v_checkdigit = '', @v_pos_code = RTrim(Ltrim(@v_pos_code))


   if  charindex('.', @v_pos_code) > 0  RETURN @v_pos_code + @v_checkdigit


   if  IsNumeric(@v_pos_code) = 0  RETURN @v_pos_code + @v_checkdigit


   if ( Len(@v_pos_code) % 2 = 1 ) set @v_pos_code2 = '0' + @v_pos_code;

   

    While @nLoop < Len(@v_pos_code2)

    begin

         select @nLoop = @nLoop + 1

            if (@nLoop % 2) = 0 

               select @v_sum = @v_sum + (cast( substring(@v_pos_code2,@nLoop,1) as integer ) * 3)

            else 

               select @v_sum = @v_sum + (cast( substring(@v_pos_code2,@nLoop,1) as integer ) * 1)

          

    end 


    select @v_mok = @v_sum % 10


    if @v_mok = 0 

       select @v_checkdigit = cast(@v_mok as varchar(1))

    else

       select @v_checkdigit = cast((10 - @v_mok) as varchar(1))


     RETURN @v_pos_code + @v_checkdigit

END

Comments