Ir para conteúdo
  • Cadastre-se

dev botao

Função para validar EAN 13


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

Recommended Posts

Postado

olá a todos, gostaria de saber se alguem tem uma rotina para validar o EAN13, baixei algumas rotinas da internet mais não estão corretas, agora com a obrigatorietadade quero validar o EAN antes de Enviar.

Desde já fico grato se alguem puder me passar.

Att
Rodrigo Guelf
 

  • 1 mês depois ...
  • Solution
Postado

adicione a unit ACBrUtil;

utilize a função "EAN13Valido"

exemplo de uso:

if EAN13Valido(CDSProdutosCOD_BARRA.AsString) then Prod.cEAN:= CDSProdutosCOD_BARRA.AsString;

espero ter ajudado.

Att
Rodrigo Guelf
 

  • Moderadores
Postado

Atualize o ACBr e veja o demo do ACBrValidador, eu inclui uma rotina que valida os dados do GTIN (antigo EAN).

Existem também uma método direto caso você não queira utilizar o componente, basta adicionar a unit "ACBrValidador" e utilizar o método "ACBrValidadorValidarGTIN(codigo)".

A desvantagem da rotina "EAN13Valido" é que ela não serve para os novos códigos GTIN que englobam o EAN8, EAN13, é codigos de 12 e 14 digitos.

  • Curtir 1

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Moderadores
Postado

Atualize o ACBr e veja o demo do ACBrValidador, eu inclui uma rotina que valida os dados do GTIN (antigo EAN).

Existem também uma método direto caso você não queira utilizar o componente, basta adicionar a unit "ACBrValidador" e utilizar o método "ACBrValidadorValidarGTIN(codigo)".

A desvantagem da rotina "EAN13Valido" é que ela não serve para os novos códigos GTIN que englobam o EAN8, EAN13, é codigos de 12 e 14 digitos.

segue ai a explicação.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • 3 semanas depois ...
Postado

Estou com problemas para utilizar a função "ACBrValidadorValidarGTIN();"

Veja alguns codigos de barras que nao validam...

7896645900026

7898908141016

7893946087173

7897186015095

7891060886139

7898132132019

7506195185568

Debugando, identifiquei que na procedure "TACBrValidador.ValidarGTIN;", o erro acontece na validação do digito verificador. O interessante é que na function "EAN13Valido()" funciona, e por isso tenho que utilizar os dois procedimentos para validar.

Será que alguem poderia me ajudar?

  • Moderadores
Postado

Estou com problemas para utilizar a função "ACBrValidadorValidarGTIN();"

Veja alguns codigos de barras que nao validam...

7896645900026

7898908141016

7893946087173

7897186015095

7891060886139

7898132132019

7506195185568

Debugando, identifiquei que na procedure "TACBrValidador.ValidarGTIN;", o erro acontece na validação do digito verificador. O interessante é que na function "EAN13Valido()" funciona, e por isso tenho que utilizar os dois procedimentos para validar.

Será que alguem poderia me ajudar?

Testei todos os EANs postados utilizando o método: "ACBrValidadorValidarGTIN" da unit "ACBrValidador" e todos passaram como válidos.

Tem certeza que o seu ACBr está atualizado? se sim faça o seguinte apague o arquivo ACBrValidador e faça novamente a atualização, o SVN vai baixar novamente o arquivo, dai faça novamente o teste.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Ok, agora funcionou... exclui a pasta ACBrDiversos e deixei o SVN baixar novamente.

Eu havia baixado esta semana, nao sei pq nao estava validando, mas o importante é que funcionou...

Muito obrigado!

  • 2 semanas depois ...
Postado

Sei que o tópico foi praticamente resolvido mas gostaria de deixar minha contribuição; eu uso a rotina abaixo; em um Form coloque 1 Edit, 1 Button, 1 Label e 1 ACBrBarCode. No evento OnClick do botão o código abaixo:

procedure TForm1.Button1Click(Sender: TObject);

var

Vvalor, Vinicial : string;

v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,vcalc,varl,vres,vpar,vimp: Integer;

begin

Vvalor := Edit1.Text;

Vinicial := Vvalor;

varl := (Length(Vvalor));

if varl < 12 then

begin

ShowMessage('Número deve conter 12 dígitos');

Edit1.SetFocus;

end

else

begin

v1 := StrToInt(Copy(Vvalor,1,1));

v2 := StrToInt(Copy(Vvalor,2,1));

v3 := StrToInt(Copy(Vvalor,3,1));

v4 := StrToInt(Copy(Vvalor,4,1));

v5 := StrToInt(Copy(Vvalor,5,1));

v6 := StrToInt(Copy(Vvalor,6,1));

v7 := StrToInt(Copy(Vvalor,7,1));

v8 := StrToInt(Copy(Vvalor,8,1));

v9 := StrToInt(Copy(Vvalor,9,1));

v10 := StrToInt(Copy(Vvalor,10,1));

v11 := StrToInt(Copy(Vvalor,11,1));

v12 := StrToInt(Copy(Vvalor,12,1));

vimp := v1 + v3 + v5 + v7 + v9 + v11;

vpar := (v2 + v4 + v6 + v8 + v10 + v12) * 3;

vcalc := (vimp) + (vpar);

vres := 100000000 - vcalc;

Vvalor := IntToStr(vres);

vres := StrToInt(Copy(Vvalor,8,1));

Label1.Caption := Vinicial + '-' + IntToStr(vres);

ACBrBarCode1.Text := Vinicial + IntToStr(vres);

end;

end;

O código-fonte completo é:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ACBrBarCode;

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

Button1: TButton;

ACBrBarCode1: TACBrBarCode;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

Vvalor, Vinicial : string;

v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,vcalc,varl,vres,vpar,vimp: Integer;

begin

Vvalor := Edit1.Text;

Vinicial := Vvalor;

varl := (Length(Vvalor));

if varl < 12 then

begin

ShowMessage('Número deve conter 12 dígitos');

Edit1.SetFocus;

end

else

begin

v1 := StrToInt(Copy(Vvalor,1,1));

v2 := StrToInt(Copy(Vvalor,2,1));

v3 := StrToInt(Copy(Vvalor,3,1));

v4 := StrToInt(Copy(Vvalor,4,1));

v5 := StrToInt(Copy(Vvalor,5,1));

v6 := StrToInt(Copy(Vvalor,6,1));

v7 := StrToInt(Copy(Vvalor,7,1));

v8 := StrToInt(Copy(Vvalor,8,1));

v9 := StrToInt(Copy(Vvalor,9,1));

v10 := StrToInt(Copy(Vvalor,10,1));

v11 := StrToInt(Copy(Vvalor,11,1));

v12 := StrToInt(Copy(Vvalor,12,1));

vimp := v1 + v3 + v5 + v7 + v9 + v11;

vpar := (v2 + v4 + v6 + v8 + v10 + v12) * 3;

vcalc := (vimp) + (vpar);

vres := 100000000 - vcalc;

Vvalor := IntToStr(vres);

vres := StrToInt(Copy(Vvalor,8,1));

Label1.Caption := Vinicial + '-' + IntToStr(vres);

ACBrBarCode1.Text := Vinicial + IntToStr(vres);

end;

end;

end.

Espero ter ajudado em algo. :D

Analista Desenvolvedor

www.sisloja.hdfree.com.br

  • 5 anos depois...
  • 1 ano depois...
  • Moderadores
Postado
27 minutos atrás, Helio Beltrao Jr. disse:

Bom dia,

Pessoal vi em um poster acima que nao tem como verificar o EAN ou GTIN no ACBRMONITORPLUS mais tem alguma previsao para incluir este validador nele ?

3.1 - Não faça flooding - Inundar o fórum com posts repetidos, com a mesma dúvida ou as mesmas palavras é chamado de flooding. Isso é proibido. Apenas um post feito no lugar certo é suficiente. Pesquise antes de postar, talvez sua dúvida já está respondida em outro post. Favor leia as regras do fórum.

Tópico continuado aqui:

 

  • Curtir 1
Equipe ACBr

Felipe Eduardo Resende Mesquita

Ajude o Projeto ACBr crescer - Assine o SAC

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

 

 

 

  • Este tópico foi criado há 2307 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.