Ir para conteúdo
  • Cadastre-se

dev botao

Validador EAN ou GTIN


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 2300 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Administradores
Postado

Boa tarde. 

 Não entendi sua segunda postagem, de qualquer forma ainda não tem nada nos planos de curto prazo para essa implementação.

Att.

  • Curtir 1
Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Moderadores
Postado
35 minutos atrás, Helio Beltrao Jr. disse:

Boa tarde,

Foi porque postei em outro lugar e o Felipe Resende reclamou mais nao sabia ok

 

Boa tarde, Helio Beltrao Jr..

Eu não reclamei, só realizei os procedimentos básicos, conforme as regras do fórum, peço desculpas e que não entenda como uma advertência.

Equipe ACBr

Felipe Eduardo Resende Mesquita

Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

 

 

 

  • Fundadores
  • Solution
Postado

A validação do GTIN é uma rotina bem simples... Veja:

procedure TACBrValidador.ValidarGTIN;
var
  DigOriginal, DigCalculado, Codigo: String;

  function CalcularDV(ACodigoGTIN: String): String;
  var
    Dig, I, DV: Integer;
  begin
    DV := 0;
    Result := '' ;

    // adicionar os zeros a esquerda, se não fizer isso o cálculo não bate
    // limite = tamanho maior codigo (gtin14) - 1 (digito)
    ACodigoGTIN := PadLeft(ACodigoGTIN, 13, '0');

    for I := Length(ACodigoGTIN) downto 1 do
    begin
      Dig := StrToInt(ACodigoGTIN[I]);
      DV  := DV + (Dig * IfThen(odd(I), 3, 1));
    end;

    DV := (Ceil(DV / 10) * 10) - DV ;
    Result := IntToStr(DV);
  end;

begin
  if not StrIsNumber(fsDocto) then
  begin
    fsMsgErro := 'Código GTIN inválido, o código GTIN deve conter somente números.' ;
    Exit;
  end;

  if not(Length(fsDocto) in [8, 12, 13, 14]) then
  begin
    fsMsgErro := 'Código GTIN inválido, o código GTIN deve ter 8, 12, 13 ou 14 caracteres.' ;
    Exit;
  end;

  Codigo       := Copy(fsDocto, 1, Length(fsDocto) - 1);
  DigOriginal  := fsDocto[Length(fsDocto)];
  DigCalculado := CalcularDV(Codigo);

  fsDigitoCalculado := DigCalculado;
  if DigOriginal <> DigCalculado then
  begin
   fsMsgErro := 'Código GTIN inválido.' ;

   if fsExibeDigitoCorreto then
     fsMsgErro := fsMsgErro + ' Dígito calculado: ' + fsDigitoCalculado ;
  end;
end; 

Creio que algo semelhante seja facilmente adaptado para outras linguagens...

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.