Funcao que verifica IE nao Funciona!!! (sintegra)

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

JMARCELO
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 13 Jul 2004 09:39
Localização: presidente venceslau - sp
Contato:

Funcao que verifica IE nao Funciona!!! (sintegra)

Mensagem por JMARCELO »

Caros colegas



utilizo a funcao descrita abaixo para verificar Inscricoes estaduais para utilizacao do sintegra e foi verificado que em alguns casos que a ie esta certa mas a funcao retorna q ela esta errada ex IE 131936107 do Mato Grosso (MT) esta correta confirmei no site do sintegra mas a funcao retorna q nao e valida


Alguem pode me ajudar

Desde ja Obrigado

********** funcao que verifica IE

procedure ieok(puf,pie)
local ok:=.f.,base,vpos,valg,vsom,vres,vdig1,vdig2,vpro,p,d,n,vbase2,origem
vbase2:=base:=origem:=""
if alltrim(pie)=="ISENTO";return .t.;endif
if SUBS(pie,1,1)=="P";return .t.;endif

for vpos:=1 to len(alltrim(pie))
if substr(pie,vpos,1)$"0123456789P"
origem+=substr(pie,vpos,1)
endif
next
mascara:="99999999999999"
if puf=="AC"
mascara:="99,99,9999-9"
base :=padr(origem,9,"0")
if left(base,2)=="01" .and. substr(base,3,2)<>"00"
vsom:=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
endif
elseif puf=="AL"
mascara:="999999999"
base :=padr(origem,9,"0")
if left(base,2)=="24"
vsom:=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vpro :=vsom*10
vres :=vpro%11
vdig1 :=if(vres==10,"0",str(vres,1,0))
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
endif
elseif puf=="AM"
mascara:="99,999,999-9"
base :=padr(origem,9,"0")
vsom :=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
if vsom<11
vdig1:=str(11-vsom,1,0)
else
vres :=vsom%11
vdig1:=if(vres<2,"0",str(11-vres,1,0))
endif
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
elseif puf=="AP"
mascara:="999999999"
base :=padr(origem,9,"0")
if left(base,2)=="03"
n:=val(left(base,8))
if n>=3000001 .and. n<=3017000
p:=5
d:=0
elseif n>=3017001 .and. n<=3019022
p:=9
d:=1
elseif n>=3019023
p:=0
d:=0
endif
vsom:=p
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1:=11-vres
if vdig1==10
vdig1:=0
elseif vdig1==11
vdig1:=d
endif
vdig1 :=str(vdig1,1,0)
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
endif
elseif puf=="BA"
mascara:="999999-99"
base :=padr(origem,8,"0")
if left(base,1)$"0123458"
vsom:=0
for vpos:=1 to 6
valg:=val(substr(base,vpos,1))
valg:=valg*(8-vpos)
vsom+=valg
next
vres :=vsom%10
vdig2 :=str(if(vres==0,0,10-vres),1,0)
vbase2:=left(base,6)+vdig2
vsom :=0
for vpos:=1 to 7
valg:=val(substr(vbase2,vpos,1))
valg:=valg*(9-vpos)
vsom+=valg
next
vres :=vsom%10
vdig1:=str(if(vres==0,0,10-vres),1,0)
else
vsom:=0
for vpos:=1 to 6
valg:=val(substr(base,vpos,1))
valg:=valg*(8-vpos)
vsom+=valg
next
vres :=vsom%11
vdig2 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,6)+vdig2
vsom :=0
for vpos:=1 to 7
valg:=val(substr(vbase2,vpos,1))
valg:=valg*(9-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1:=str(if(vres<2,0,11-vres),1,0)
endif
vbase2:=left(base,6)+vdig1+vdig2
ok:=(vbase2==origem)
elseif puf=="CE"
mascara:="99999999-9"
base :=padr(origem,9,"0")
vsom :=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1:=11-vres
if vdig1>9;vdig1:=0;endif
vbase2:=left(base,8)+str(vdig1,1,0)
ok :=(vbase2==origem)
elseif puf=="DF"
mascara:="999,99999,999-99"
base :=padr(origem,13,"0")
if left(base,3)=="073"
vsom:=0
vmul:={4,3,2,9,8,7,6,5,4,3,2}
for vpos:=1 to 11
valg:=val(substr(base,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig1 :=if(vres<2,0,11-vres)
vbase2:=left(base,11)+str(vdig1,1,0)
vsom :=0
vmul :={5,4,3,2,9,8,7,6,5,4,3,2}
for vpos:=1 to 12
valg:=val(substr(vbase2,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig2 :=if(vres<2,0,11-vres)
vbase2+=str(vdig2,1,0)
ok :=(vbase2==origem)
endif
elseif puf=="ES"
mascara:="999999999"
base :=padr(origem,9,"0")
vsom :=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
elseif puf=="GO"
mascara:="99,999,999-9"
base :=padr(origem,9,"0")
if left(base,2)$"10,11,15"
vsom:=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres:=vsom%11
if vres==0
vdig1:="0"
elseif vres==1
n :=val(left(base,8))
vdig1:=if(n>=10103105 .and. n<=10119997,"1","0")
else
vdig1:=str(11-vres,1,0)
endif
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
endif
elseif puf=="MA"
mascara:="999999999"
base :=padr(origem,9,"0")
if left(base,2)=="12"
vsom:=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
endif
elseif puf=="MT"
mascara:="9999999999-9"
vmul :={3,2,9,8,7,6,5,4,3,2}
vsom:=0
for vpos:=1 to 10
valg:=val(substr(base,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig1 :=if(vres<2,0,11-vres)
vbase2:=left(base,10)+str(vdig1,1,0)
ok :=(vbase2==origem)
elseif puf=="MS"
mascara:="999999999"
base :=padr(origem,9,"0")
if left(base,2)=="28"
vsom:=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
endif
elseif puf=="MG"
mascara:="999,999,999/9999"
base :=padr(origem,13,"0")
vbase2 :=left(base,3)+"0"+substr(base,4,8)
n :=2
vsom :=""
for vpos:=1 to 12
valg:=val(substr(vbase2,vpos,1))
n :=if(n==2,1,2)
valg:=alltrim(str(valg*n,2,0))
vsom+=valg
next
n :=0
for vpos:=1 to len(vsom);n+=val(substr(vsom,vpos,1));next
vsom :=n
do while right(str(n,3,0),1)<>"0";n++;enddo
vdig1 :=str(n-vsom,1,0)
vbase2:=left(base,11)+vdig1
vsom :=0
vmul :={3,2,11,10,9,8,7,6,5,4,3,2}
for vpos:=1 to 12
valg:=val(substr(vbase2,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig2 :=if(vres<2,0,11-vres)
vbase2+=str(vdig2,1,0)
ok :=(vbase2==origem)
elseif puf=="PA"
mascara:="99-999999-9"
base :=padr(origem,9,"0")
if left(base,2)=="15"
vsom:=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
endif
elseif puf=="PB"
mascara:="99,999,999-9"
base :=padr(origem,9,"0")
vsom :=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=11-vres
if vdig1>9;vdig1:=0;endif
vbase2:=left(base,8)+str(vdig1,1,0)
ok :=(vbase2==origem)
elseif puf=="PE"
mascara:="99,9,999,9999999-9"
base :=padr(origem,14,"0")
vsom :=0
vmul :={5,4,3,2,1,9,8,7,6,5,4,3,2}
for vpos:=1 to 13
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,13)+str(vdig1,1,0)
ok :=(vbase2==origem)
elseif puf=="PI"
mascara:="999999999"
base :=padr(origem,9,"0")
vsom :=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
elseif puf=="PR"
mascara:="999,99999-99"
base :=padr(origem,10,"0")
vsom :=0
vmul :={3,2,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 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,8)+vdig1
vsom :=0
vmul :={4,3,2,7,6,5,4,3,2}
for vpos:=1 to 9
valg:=val(substr(vbase2,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig2 :=str(if(vres<2,0,11-vres),1,0)
vbase2+=vdig2
ok :=(vbase2==origem)
elseif puf=="RJ"
mascara:="99,999,99-9"
base :=padr(origem,8,"0")
vsom :=0
vmul :={2,7,6,5,4,3,2}
for vpos:=1 to 7
valg:=val(substr(base,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig1 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,7)+vdig1
ok :=(vbase2==origem)
elseif puf=="RN"
mascara:="99,999,999-9"
base :=padr(origem,9,"0")
if left(base,2)=="20"
vsom:=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vpro :=vsom*10
vres :=vpro%11
vdig1 :=str(if(vres>9,0,vres),1,0)
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
endif
elseif puf=="RO"
mascara:="999999999"
base :=padr(origem,9,"0")
vbase2 :=substr(base,4,5)
vsom :=0
for vpos:=1 to 5
valg:=val(substr(vbase2,vpos,1))
valg:=valg*(7-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=11-vres
if vdig1>9;vdig1-=10;endif
vbase2:=left(base,8)+str(vdig1,1,0)
ok :=(vbase2==origem)
elseif puf=="RR"
mascara:="99999999-9"
base :=padr(origem,9,"0")
if left(base,2)=="24"
vsom:=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*vpos
vsom+=valg
next
vres :=vsom%9
vdig1 :=str(vres,1,0)
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
endif
elseif puf=="RS"
mascara:="999/999999-9"
base :=padr(origem,10,"0")
n :=val(left(base,3))
if n>0 .and. n<468
vsom:=0
vmul:={2,9,8,7,6,5,4,3,2}
for vpos:=1 to 9
valg:=val(substr(base,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig1 :=11-vres
if vdig1>9;vdig1:=0;endif
vbase2:=left(base,9)+str(vdig1,1,0)
ok :=(vbase2==origem)
endif
elseif puf=="SC"
mascara:="999,999,999"
base :=padr(origem,9,"0")
vsom :=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=if(vres<2,"0",str(11-vres,1,0))
vbase2:=left(base,8)+vdig1
ok :=(vbase2==origem)
elseif puf=="SE"
mascara:="99999999-9"
base :=padr(origem,9,"0")
vsom :=0
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=11-vres
if vdig1>9;vdig1:=0;endif
vbase2:=left(base,8)+str(vdig1,1,0)
ok :=(vbase2==origem)
elseif puf=="SP"
if left(base,1)=="P"
mascara:="P-99999999,9/999"
base :=padr(origem,13,"0")
vbase2 :=substr(base,2,8)
vsom :=0
vmul :={1,3,4,5,6,7,8,10}
for vpos:=1 to 8
valg:=val(substr(vbase2,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig1 :=right(str(vres,2,0),1)
vbase2:=left(base,9)+vdig1+substr(base,11,3)
else
mascara:="999,999,999,999"
base :=padr(origem,12,"0")
vsom :=0
vmul :={1,3,4,5,6,7,8,10}
for vpos:=1 to 8
valg:=val(substr(base,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig1 :=right(str(vres,2,0),1)
vbase2:=left(base,8)+vdig1+substr(base,10,2)
vsom :=0
vmul :={3,2,10,9,8,7,6,5,4,3,2}
for vpos:=1 to 11
valg:=val(substr(vbase2,vpos,1))
valg:=valg*vmul[vpos]
vsom+=valg
next
vres :=vsom%11
vdig2 :=right(str(vres,2,0),1)
vbase2+=vdig2
endif
ok:=(vbase2==origem)
elseif puf=="TO"
mascara:="99,99,999999-9"
base :=padr(origem,11,"0")
if substr(base,3,2)$"01,02,03,99"
vbase2:=left(base,2)+substr(base,5,6)
vsom :=0
for vpos:=1 to 8
valg:=val(substr(vbase2,vpos,1))
valg:=valg*(10-vpos)
vsom+=valg
next
vres :=vsom%11
vdig1 :=str(if(vres<2,0,11-vres),1,0)
vbase2:=left(base,10)+vdig1
ok :=(vbase2==origem)
endif
else
alert("Unidade Federal Invalida !")
endif
if !ok
if empty(vbase2)
alert("Os D¡gitos Identificadores de Cidade e/ou Estado N„o Conferem !")
else
vbase2:=strtran(transform(val(vbase2),mascara)," ","0")
vbase2:=strtran(vbase2,",",".")
alert("Inscri‡„o Inv lida !;O Correto Seria;"+vbase2)
endif
RETURN .F.
ELSE
RETURN .T.
endif
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

o meu ta assim

ElseIf puf == "MT"
mascara:= "@r 99.999999-9"
base :=padr(origem,9,"0")
vmul:= {9,8,7,6,5,4,3,2}
vsom:=0
for vpos:= 1 to 8
valg:= val(substr(base, vpos, 1))
valg:= valg * vmul[vpos]
vsom+= valg
next
vres :=vsom % 11
vdig1 :=if(vres < 2, 0, 11 - vres)
vbase2:=Left(base, 8) + Str(vdig1, 1, 0)
ok :=(vbase2 == origem)

e esta dando como certa a EI
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Funcao que verifica IE nao Funciona!!! (sintegra)

Mensagem por Maligno »

JMARCELO escreveu:em alguns casos que a ie esta certa mas a funcao retorna q ela esta errada ex IE 131936107 do Mato Grosso (MT) esta correta confirmei no site do sintegra mas a funcao retorna q nao e valida
Não verifiquei seu código. Por isso não sei se está certo. Talvez esteja. Mas note que a IE do Estado de Mato Grosso deve ter 11 dígitos. Se o usuário incluir um número mais curto, você deve completá-lo com zeros a esquerda. O número que você disse estar sendo invalidado foi validado na minha função. Acho que o problema é só mesmo o tamanho da IE.

[]'s
Maligno
http://www.buzinello.com/prg
Responder