Página 1 de 1

Validar IE de Pernanbuco

Enviado: 21 Fev 2019 11:11
por Itamar M. Lins Jr.
Ola!
Eu uso esta função, abaixo só que está retornando erro.

Código: Selecionar todos

...
   elseif puf=="PE"
      mascara:="99,999,999-9"
      base   :=pad(origem,9,"0")
      vsom   :=0
      vmul   :=  {9,8,7,6,5,4,3,2}
      for vpos:=1 to 8
          valg:=val(substr(base,vpos,1))
          valg:=valg*vmul[vpos]
          vsom+=valg
      next
      vres  :=vsom%11
      vdig1 :=11-vres
      if(vdig1>9,vdig1-=10,)
      vbase2:=left(base,8)+str(vdig1,1,0)
      ok    :=(vbase2==origem)
...
Já vi que a mascara não é nem mais essa.
Alguém tem essa rotina atualizada ?

Saudações,
Itamar M. Lins Jr.

Validar IE de Pernanbuco

Enviado: 21 Fev 2019 13:49
por janio

Código: Selecionar todos

//************************************************************ 
function ValidIE_PE(cIE) 
local cDVs := SubStr(cIE,8,2) 
* 
cIE := Left(cIE,7) 
cIE += Modulo11(cIE,2,8) 
cIE += Modulo11(cIE,2,9) 

return cDVs = Right(cIE,2) 
Teste: 0282613-56

Validar IE de Pernanbuco

Enviado: 21 Fev 2019 15:58
por Daniel
Faltou a função modulo11

Código: Selecionar todos

/*
Função| Modulo11 | Autor | Erick Nori Barbosa      | Data |     30/05/94|
Descrição  | Calculo do modulo 11                                              
Sintaxe    | ExpL1 := Modulo11(ExpC1,ExpN1,ExpN2)
Parametros | ExpC1 = String para calcular o digito                                    
           | ExpN1 = Primeiro numero de multiplicação do modulo 11       
           | ExpN2 = Ultimo numero de multiplicação do modulo 11          
           | ExpC2 = Digito de verificação (Retornado pela função)       
Uso        | Genérico                                                                               
*/
*****************************************************
Function Modulo11(cStr,nMultIni,nMultFim)
Local i, nModulo := 0, cChar, nMult

nMultIni := Iif( nMultIni==Nil,2,nMultIni )
nMultFim := Iif( nMultFim==Nil,9,nMultFim )
nMult := nMultIni
cStr := AllTrim(cStr)

For i := Len(cStr) to 1 Step -1
     cChar := Substr(cStr,i,1)
     nModulo += Val(cChar)*nMult
     nMult:= IIf(nMult==nMultfim,2,nMult+1)
Next
nRest := nModulo % 11
nRest := IIf(nRest==0 .or. nRest==1,0,11-nRest)
Return(Str(nRest,1))

Validar IE de Pernanbuco

Enviado: 21 Fev 2019 16:43
por JoséQuintas

Validar IE de Pernanbuco

Enviado: 21 Fev 2019 18:44
por JoséQuintas
esqueci que era só eu tentar cadastrar.... rs
Essa indicada não passou na da sefazclass.
iestadual.png

Validar IE de Pernanbuco

Enviado: 21 Fev 2019 19:01
por JoséQuintas
JoséQuintas escreveu:Essa indicada não passou na da sefazclass.
Mas é lógico... coloquei que era de São Paulo kkkkk

Colocando Pernambuco validou.

Código: Selecionar todos

PROCEDURE Main

   LOCAL cInsc := "028261356"

   ? ValidIE( cInsc, "PE" )

   Inkey(0)

   RETURN
hbmk2 test.prg sefazclass.hbc

Validar IE de Pernanbuco

Enviado: 21 Fev 2019 19:10
por JoséQuintas
Só a título de curiosidade....
O site do Sintegra ainda vale.
sintegra1.png
sintegra2.png
sintegra3.png
sintegra4.png
Curioso é que tem o cálculo anterior, mas a IE era muito maior.

O erro da rotina inicial é pegar os números de calcular mod11 a partir do primeiro (9,8,7,6...), mas deveria SEMPRE terminar no 2.