Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 4438 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

marcelo_sp muito obrigado, valeu pelos fontes.

Eu havia feito uma rotina semelhante para gerar o ean8 porem no validador não validava então achei que eu estava errado. porém os ean8 gerados na sua rotina também não validão pelo menos da maneiro que estou fazendo. exemplo.

Caso o usuário não coloque o código de barras, o meu sistema vai gerar um a partir do código sequencia do sistema. ou seja.

o produto com codigo 20 vira no ean13 0000000000208 e isso valida direitinho.

ja no ean 8 o codigo 20 vira 00000204 e isso não valida.

Eu estou usando a seguinte rotina para validar:

if Trim(Edit9.Text)<>EmptyStr then

begin

ACBrValidador1.TipoDocto:=docGTIN;

ACBrValidador1.Documento:=Edit9.Text;

if ACBrValidador1.Validar then

begin

end else

begin

Edit9.Clear;

Edit9.Text:='';

Edit9.SetFocus;

end;

end;

O que estou fazendo de errado?

  • Moderadores
Postado

Essa atualização para o calculo dos GTINs foi feita a muito tempo, inclusive foi eu e o André que fizemos e testei com uma massa de dados enorme, estava tudo OK, já deve ter quase 1 ano que foi feito.

Verifique se o seu arquivo não está com problemas e não foi atualizado, uma boa seria apagar o arquivo ACBrValidador.pas e efetuar a atualização o tortoise vai baixar novamente o arquivo que está no repositório.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Agora valido blz, EAN13 e o EAN8 não testei os outros.

Fabio , só pra ter uma idéia baseando no que o Regis disse que modificou o componente a quase 1 ano . Gostaria de saber quando vc atualizou seu ACBr pela última vez ?

Postado

O André tem razão , a função abaixo esta validando com o digito 8 e não 4 para o código '0000020' !!!

function Valida_EAN(vEan: String): Boolean ;

var

Temp1, Temp2, Digito: Integer;

Temp3, Temp4: String;

begin

Result := False;

Temp2 := 0;

Temp3 := '';

if ((Length(vEan) <> 8) and (Length(vEan) <> 12) and (Length(vEan) <> 13) and (Length(vEan) <> 18)) then

Exit;

Temp4 := '31313131313131313';

Temp4 := Copy(Temp4,(Length(Temp4)-Length(vEan)),Length(vEan)-1);

Digito := StrToInt(Copy(vEan,Length(vEan),1));

Temp3 := Copy(vEan,1,Length(vEan)-1);

for Temp1 := 1 to Length(Temp3) do

Temp2 := Temp2+StrToInt(Temp3[Temp1])*StrToInt(Temp4[Temp1]);

Temp2:=10-Round(Frac(Temp2/10)*10);

if Temp2 = 10 then

Temp2 := 0 ;

Result := (Temp2 = Digito);

end;

Postado

Fabio , a função de teste que calcula EAN8 que postei esta incorreta como a sua ! , conhecidiu da que postei retornar o mesmo valor que a sua , na verdade '0000020' tem o digito verificador = 8 e não 4 , por isso que o ACBrValidador estava retornando False , me equivoquei com aquela função que para EAN13 esta correta mas para EAN8 não , retorne o fonte anterior do ACBrValidador.pas que esta correto , e modifique a função abaixo para que result em string pro seu uso e não boolean , testei varios codigos com esta função e deu certo , foi de grande valia o link do post que o André informou para que possamos testar esses GTIN's ! Obrigado Andre e Regys .

Function Valida_EAN(vEan: String): Boolean ;

var

Temp1, Temp2, Digito: Integer;

Temp3, Temp4: String;

begin

Result := False;

Temp2 := 0;

Temp3 := '';

if ((Length(vEan) <> 8) and (Length(vEan) <> 12) and (Length(vEan) <> 13) and (Length(vEan) <> 18)) then

Exit;

Temp4 := '31313131313131313';

Temp4 := Copy(Temp4,(Length(Temp4)-Length(vEan)),Length(vEan)-1);

Digito := StrToInt(Copy(vEan,Length(vEan),1));

Temp3 := Copy(vEan,1,Length(vEan)-1);

for Temp1 := 1 to Length(Temp3) do

Temp2 := Temp2+StrToInt(Temp3[Temp1])*StrToInt(Temp4[Temp1]);

Temp2:=10-Round(Frac(Temp2/10)*10);

if Temp2 = 10 then

Temp2 := 0 ;

Result := (Temp2 = Digito);

end;

Postado

marcelo_sp, como ficou então a função de geração do EAN8?

Fabio , se vc não resolveu ainda , essa rotina aqui acredito que resolva seu problema ! testei um Random com 10 mil códigos e o ACBrValidador validou todos os códigos gerados em varios testes que fiz .

  • Este tópico foi criado há 4438 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.