Create Function UDF_Valida_Ean_13(@Ean varchar(13)) returns varchar(1) as begin --declare @Ean varchar(13) = '5010017088439' -- 088537031467 declare @12Dig varchar(12) declare @Valor1 int declare @Valor2 int declare @Valor3 int declare @Mult10 int declare @DigVerificador int declare @DigVerifCalculado int declare @Retorno varchar(1) set @DigVerificador = convert(int,substring(@Ean,13,1)) set @12Dig = SUBSTRING(@Ean,1,12) -- Soma Posições Pares e Multiplica por 3 set @Valor1 = convert(int,SUBSTRING(@Ean,2,1)) + convert(int,SUBSTRING(@Ean,4,1)) + convert(int,SUBSTRING(@Ean,6,1)) + convert(int,SUBSTRING(@Ean,8,1)) + convert(int,SUBSTRING(@Ean,10,1)) + convert(int,SUBSTRING(@Ean,12,1)) set @Valor1 = @Valor1 * 3 -- Soma Posições Impares set @Valor2 = convert(int,SUBSTRING(@Ean,1,1)) + convert(int,SUBSTRING(@Ean,3,1)) + convert(int,SUBSTRING(@Ean,5,1)) + convert(int,SUBSTRING(@Ean,7,1)) + convert(int,SUBSTRING(@Ean,9,1)) + convert(int,SUBSTRING(@Ean,11,1)) set @Valor3 = @Valor1 + @Valor2 -- Verifica Próximo Múltiplo de 10 if (@Valor3 <= 10) set @Mult10 = 10 else if ((@Valor3 % 10) = 0) set @Mult10 = @Valor3 else begin if (@Valor3 >= 100) set @Mult10 = (convert(int,Substring(convert(varchar(3),@Valor3),1,2)) + 1) * 10 else set @Mult10 = (convert(int,Substring(convert(varchar(2),@Valor3),1,1)) + 1) * 10 end -- Subtrai o Múltiplo de 10 pelo valor calculado para achar o Dígito Verificador set @DigVerifCalculado = @Mult10 - @Valor3 if (@DigVerifCalculado = @DigVerificador) set @Retorno = 'S' else set @Retorno = 'N' return(@Retorno) end