Array
(
)

Validação Ean 13 Dígitos

Riechelmann
   - 13 jul 2015

Bom Dia
Passando para compartilhar o código, hoje fui procurar uma validação em SQL para o Ean de 13 dígitos e não achei nenhuma que funcionasse, fiz na mão seguindo a regra do EAN para calcular o dígito verificador.
#Código

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