marcioe Posted February 5 Report Share Posted February 5 Olá a aTodos Tem como validar Código de barras Exemplo 7891260097793 Válido 7891260097794 Inválido Teria uma Rotina para fazer isso Pois tem clientes que cadastram errado ,e está me gerando problemas de envio de NF Quote Link to comment Share on other sites More sharing options...
mkyx Posted February 5 Report Share Posted February 5 vc pode montar um rotina, para verificar a validade do 13º dígito. Quote Link to comment Share on other sites More sharing options...
mkyx Posted February 5 Report Share Posted February 5 eu faço assim: // A VARIAVEL CODEAN13 GUARDA O CÓDIGO EAN13 DIGITADO PELO OPERADOR DIGI="131313131313" T=0 FOR I=1 TO 12 T=T+(VAL(SUBSTR(CODEAN13,I,1))*VAL(SUBSTR(CODEAN13,I,1))) NEXT I DIG="0" IF (T/10)>INT(T/10) DIG=STR(((INT(T/10)+1)*10)-T,1) ENDIF IF RIGHT(CODEAN13,1)#DIG MSGINFO("Código de barra inválido!","Favor verificar:") endif Quote Link to comment Share on other sites More sharing options...
mkyx Posted February 5 Report Share Posted February 5 corrigindo essa linha: T=T+(VAL(SUBSTR(CODEAN13,I,1))*VAL(SUBSTR(CODEAN13,I,1))) o correto é T=T+(VAL(SUBSTR(CODEAN13,I,1))*VAL(SUBSTR(DIGI,I,1))) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 6 Report Share Posted February 6 #include "FiveWin.ch" FUNCTION Main() LOCAL cCodBar cCodBar := '07033071756' // cCodBar := '78900073' // MARLBORO MACO BRANCO IF .NOT. ValidaEAN( @cCodbar ) MsgStop( "Código de Barras Invalidado!", "Erro Fatal" ) ELSE MsgStop( "Código de Barras Validado!", "Sucesso!" ) ENDIF RETURN NIL Function ValidaEAN(cCodigoBarras) LOCAL nInd := 0 LOCAL nUnidade := 0 LOCAL nDigito := 0 LOCAL lRet := .F. LOCAL aPosicao[12] If StrZero(Len(Trim(cCodigoBarras)), 2,0) $ "13" For nInd := 1 to 12 aPosicao[nInd] := Val(SubStr(cCodigoBarras, nInd, 1)) Next nUnidade := Val(Right(Str(((aPosicao[2]+aPosicao[4]+aPosicao[6]+aPosicao[8]+aPosicao[10]+aPosicao[12])*3) + ( aPosicao[1]+aPosicao[3]+aPosicao[5]+aPosicao[7]+aPosicao[9]+aPosicao[11])), 1)) nDigito := If((10-nUnidade ) > 9, 0, 10-nUnidade) lRet := nDigito = Val(Right(AllTrim(cCodigoBarras), 1)) IF( .NOT. lRet, Alert("Exigencia NF-e * O digito verificador esta incorreto !; Digito Verificador Correto:" + STR(nDigito,2)),) Else RETURN( .T. ) EndIf Return( lRet ) /* // OU: FUNCTION ValidaEAN( cCodBar ) LOCAL nInd := 0 LOCAL nUnidade := 0 LOCAL nDigito := 0 LOCAL lRet := .T. LOCAL aPosicao[ 12 ] IF Empty( cCODBAR ) MsgStop( "Código de Barras está Vazio, Verifique!", "Error" ) lRet := .F. RETURN( lRet ) ENDIF cCodbar := StrZero( Val( AllTrim( cCodbar ) ), 13, 0 ) FOR nInd := 1 TO 12 aPosicao[ nInd ] := Val( SubStr( cCodbar, nInd, 1 ) ) NEXT nUnidade := Val( Right( Str( ( ( aPosicao[ 2 ] + aPosicao[ 4 ] + aPosicao[ 6 ] + aPosicao[ 8 ] + aPosicao[ 10 ] + aPosicao[ 12 ] ) * 3 ) + ( aPosicao[ 1 ] + aPosicao[ 3 ] + aPosicao[ 5 ] + aPosicao[ 7 ] + aPosicao[ 9 ] + aPosicao[ 11 ] ) ), 1 ) ) nDigito := If( ( 10 - nUnidade ) > 9, 0, 10 - nUnidade ) lRet := nDigito = Val( Right( AllTrim( cCodbar ), 1 ) ) RETURN( lRet ) */ // FIN / END Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.