Código
Muito usado em boletos bancários.
CREATE FUNCTION Modulo10(@numero varchar(15))
RETURNS CHAR(1)
AS
BEGIN
declare
@max smallint,
@contador smallint,
@peso varchar(24),
@resto smallint,
@valor smallint,
@soma int,
@retorno int
select @peso = '121212121212121212121212'
select @max = datalength(@numero)
select @peso = right(@peso, @max)
set @contador = @max+1
set @soma = 0
loop:
set @contador = @contador-1
set @valor = isnull((ascii(substring(@peso, @contador, 1))-48) *
(ascii(substring(@numero, @contador, 1))-48), 0)
set @soma = isnull((select (case when (@valor<10) then
@valor when (@valor>9) then @valor-10 end)), 0)+@soma
set @soma = isnull((select (case when (@valor<10) then
null when (@valor>9) then 1 end)), 0)+@soma
if (@contador >1) goto loop
select @resto= sum(@soma)%10
select @retorno = case @resto when 0 then 0 else 10-@resto end
return(Convert(char(1), @retorno))
END
GO
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009