Validar CPF e CNPJ

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Validar CPF e CNPJ

Mensagem por Maligno »

ederxc escreveu:na relaidade nem sei como funciona a validação de CNPJ e CPF
Basta aplicar as fórmulas matemáticas. Não só pra CNPJ e CPF, mas também para as IEs de todos os Estados, CRC, PIS, Título de Eleitor, cartão de crédito, etc.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Validar CPF e CNPJ

Mensagem por Eolo »

Ederxc,
To abrindo um novo tópico, com a forma de calcular os dígitos de verificação do CPF e CNPJ.
Eolo
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Validar CPF e CNPJ

Mensagem por Augusto »

Netavin escreveu:Acho que meus 48 anos estão já estão pesando ehehe
Nem tanto... nem tanto... eu tbm sou de 59, 4.8 "quase" todo original não fosse uma cirurgia de ligamento no joelho que o vício do futsal me deixou de herança.... mas mesmo assim continuo batendo minha bolinha... hehe

Fico satisfeito de ter ajudado...
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Validar CPF e CNPJ

Mensagem por Poka »

É Augusto, eu também perdi um menisco do joelho direito no futebol, uma fratura do punho esquerdo no futebol de salão, isso quando era jovem, e pelo jeito eu sou avô aqui do forum, (53 aninhos)

Mas eu não fico velho , eu fico "VELHACO".

Ah! , dia 1 de fevereiro passado subi na escada para conversar com o pedreiro que está reformando a minha casa ( burro, devia ter pedido para o pedreiro descer para falar comigo), e não deu outra, fraturei o Úmero do braço direito, 30 dias de môlho, mas graças a Deus ja estou me recuperando. É, deve ser a idade mesmo.


Um abraço

Poka
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Validar CPF e CNPJ

Mensagem por Augusto »

Poka escreveu:Mas eu não fico velho , eu fico "VELHACO".
Minha filha diz que eu não sou VELHO... ela diz que eu sou "ANTIGO"... hehe... já minha mulher diz que eu sou "USADO"... mais que ela não me troca por nenhum ZEROkm...
:|< Tô bem na fita....
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Validar CPF e CNPJ

Mensagem por Eolo »

Poka,
Essa eu ganhei: to com 56, em agosto emplaco 57, já já sou um 60tão.
Kracas!
Eolo
Avatar do usuário
Netavin
Usuário Nível 3
Usuário Nível 3
Mensagens: 306
Registrado em: 28 Fev 2007 08:37
Localização: Cacoal-RO

Validar CPF e CNPJ

Mensagem por Netavin »

... rapaz ! Com meus 48 ainda estou iniciando o aprendizado de uma nova linguagem!! VFP.
Será que dá tempo de usá-la ?! rsrs
:))
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Validar CPF e CNPJ

Mensagem por Augusto »

Claro... Nunca é tarde para se aprender alguma coisa... e o "saber" não ocupa lugar na mente...

Vai com fé !!! O VFP é bem legal...
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Validar CPF e CNPJ

Mensagem por sygecom »

Mas Tche, com todo o respeito.......soh tem velha guarda aqui....como é que eu fico ?.....toh com 25...cheirando a leite ainda.....hehehe....mas uma coisa é certa....nunca aprendi nd com pessoas da minha idade....sempre foi com pessoas mais velhas....com bagagem e mais experiencia....o que seria eu sem o mais velho pra mostrar o caminho certo....caminho da humildade,dignidade e respeito....

Aos senhores do forum.....é um prazer enorme...adquirir a sabedoria de vcs.... :{ :{ :{
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Validar CPF e CNPJ

Mensagem por ederxc »

Eolo , pode postar , é sempre bom ter em mãos como o material funciona ! :)Pos
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Validar CPF e CNPJ

Mensagem por sygecom »

Tche, o colega postou ontem....
https://pctoledo.org/forum/viewtopic.php?t=5840

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Validar CPF e CNPJ

Mensagem por Eolo »

É, postei a forma de cálculo do CPF/CNPJ e também do EAN (13 e 8). Só nunca descobri (nem fui atrás) como é o cálculo das IE Estaduais (talvez seja a mesma "Base 11" do CPF/CNPJ). Se alguém souber, bem que podia postar pra gente ficar sabendo.

Vô Eolo
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Validar CPF e CNPJ

Mensagem por sygecom »

Tche, eu tenho essa PRA IE.....mas nunca usei.

Código: Selecionar todos

* Enviado por: Carlos Eduardo Brock - Email: brock_carlos@yahoo.com.br

#include "inkey.ch"
Cls
aIePict :={ {"AC", "@R 99.999.999/999-99"},;
            {"AL", "@R 999999999"},;
            {"AM", "@R 99.999.999-9"},;
            {"AP", "@R 999999999"},;
            {"BA", "@R 999999-99"},;
            {"DF", "@R 99.999999.999-99"},;
            {"CE", "@R 99999999-9"},;
            {"ES", "@R 999999999"},;
            {"GO", "@R 99.999.999-9"},;
            {"MA", "@R 999999999"},;
            {"MG", "@R 999.999.999/9999"},;
            {"MS", "@R 99999999-9"},;
            {"MT", "@R 9999999999-9"},;
            {"PA", "@R 99-999999-9"},;
            {"PB", "@R 99999999-9"},;
            {"PE", "@R 99.9.999.9999999-9"},;
            {"PI", "@R 999999999"},;
            {"PR", "@R 999.99999-99"},;
            {"RJ", "@R 99.999.99-9"},;
            {"RN", "@R 99.999.999-9"},;
            {"RO", "@R 999.99999-9"},;
            {"RR", "@R 99.999.999-9"},;
            {"RS", "@R 999/9999999"},;
            {"SC", "@R 999.999.999"},;
            {"SE", "@R 99999999-9"},;
            {"SP", "@R 999.999.999.999"},;
            {"TO", "@R 99.99.999999-9"} }
cIe := "                  "
cUF := "  "
Do while LastKey() <> K_ESC
   @ 09, 10 Say "Uf  :" Get cUF Picture "@!" Valid AScan( aIePict, {|nI| cUf == nI[ 1 ]} ) <> 0
   Read
   @ 10, 10 Say "I.E.:" Get cIe Picture aIePict[ AScan( aIePict, {|nI| cUf == nI[ 1 ]} ) ][ 2 ]
   Read
   @ 11, 10 Say "I.E.: " + Transform( cIe, aIePict[ AScan( aIePict, {|nI| cUf == nI[ 1 ]} ) ][ 2 ] ) +;
                " - Esta: " + If ( TestaIe( cIe, cUF ), "Certa", "Errada" )
EndDo

********************************************/
Function TestaIe( cIe1, cUF )
Local nI, nX, cTemp := "", nT2, nMod := 11
local cIe2 := "", nSoma := 0, cProd := "", aUF
Local nD1, nD2
Local aP1, aP2, nPt
Private nACt, nALt, nAMt, nAPt, nBAt, nCEt, nDFt, nESt, nGOt
Private nMAt, nMGt, nMSt, nMTt, nPAt, nPBt, nPEt, nPIt, nPRt
Private nROt, nRRt, nRSt, nSEt, nSCt, nSPt, nTOt, nRJt, nRNt
Private aAC1, aAL1, aAM1, aAP1, aBA1, aCE1, aDF1, aES1, aGO1
Private aMA1, aMG1, aMS1, aMT1, aPA1, aPB1, aPI1, aPE1, aPR1
Private aRJ1, aRN1, aRO1, aRR1, aRS1, aSE1, aSC1, aSP1, aTO1
aUf:= { "AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "GO", "MA", "MG", "MS",;
        "MT", "PA", "PB", "PE", "PI", "PR", "RJ", "RN", "RO", "RR", "RS",  "SC",;
        "SE", "SP","TO", }
cUf := Upper( cUf )
If AScan( aUf, {|nI| cUf == nI} ) == 0
   Return( .F. )
EndiF
// Tamanho da IE
nACt := 13; nALt := 09; nAMt := 09; nAPt := 09; nBAt := 08; nCEt := 09
nDFt := 13; nESt := 09; nGOt := 09; nMAt := 09; nMGt := 13; nMSt := 09
nMTt := 11; nPAt := 09; nPBt := 09; nPEt := 14; nPIt := 09; nPRt := 10
nRJt := 08; nRNt := 09; nROt := 09; nRRt := 09; nRSt := 10; nSEt := 09
nSCt := 09; nSPt := 12; nTOt := 11
// Pesos da multiplicao para IE 
aAC1 := { { 04, 03, 02, 09, 08, 07, 06, 05, 04, 03, 02 },;
          { 05, 04, 03, 02, 09, 08, 07, 06, 05, 04, 03, 02 } }
aAL1 := { { 02, 03, 04, 05, 06, 07, 08, 09 }, }
aAM1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aAP1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aBA1 := { { 07, 06, 05, 04, 03, 02}, { 08, 07, 06, 05, 04, 03, 02 } }
aCE1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aDF1 := { { 04, 03, 02, 09, 08, 07, 06, 05, 04, 03, 02 },;
          { 05, 04, 03, 02, 09, 08, 07, 06, 05, 04, 03, 02 } }
aES1 := { { 09, 09, 09, 09, 09, 09, 09, 09, 09 }, }
aGO1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aMA1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aMG1 := { { 01, 02, 01, 02, 01, 02, 01, 02, 01, 02, 01, 02 },;
          { 03, 02, 11, 10, 09, 08, 07, 06, 05, 04, 03, 02 } }
aMS1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aMT1 := { { 03, 02, 09, 08, 07, 06, 05, 04, 03, 02 }, }
aPA1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aPB1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aPI1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aPE1 := { { 05, 04, 03, 02, 01, 09, 08, 07, 06, 05, 04, 03, 02 }, }
aPR1 := { { 03, 02, 07, 06, 05, 04, 03, 02 },;
          { 04, 03, 02, 07, 06, 05, 04, 03, 02 } }
aRJ1 := { { 02, 07, 06, 05, 04, 03, 02 }, {  } }
aRN1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aRO1 := { { 06, 05, 04, 03, 02 }, }
aRR1 := { { 01, 02, 03, 04, 05, 06, 07, 08 }, }
aRS1 := { { 02, 09, 08, 07, 06, 05, 04, 03, 02 }, {  } }
aSE1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aSC1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }
aSP1 := { { 01, 03, 04, 05, 06, 07, 08, 10 },;
          { 03, 02, 10, 09, 08, 07, 06, 05, 04, 03, 02 } }
aTO1 := { { 09, 08, 07, 06, 05, 04, 03, 02 }, }

aP1 := &("a"+cUF+"1")[1]
aP2 := &("a"+cUF+"1")[2]
nPt := &("n"+cUF+"t")
For nI := 1 To Len(cIe1)
    cTemp += If( SubStr( cIe1, nI, 1 ) $ "0123456789", SubStr( cIe1, nI, 1 ), "" )
Next
cIe1  := cTemp
If Len( cIE1 ) <> nPt
   Return .F.
EndIf
// A partir de alguns pontos já da pra fazer a validacao das IEs, mas sao + 3 linhas de codigo q quer queira, quer nao, vao gerar mais simblolos dentro do obj.

Do Case
   Case cUF == "AC"
        cIe2 := SubStr( cIe1, 1, 11 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1 := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Ltrim( Str( Int( nD1 ) ) )
        nSoma := 0
        AEval( aP2, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD2 := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Ltrim( Str( Int( nD2 ) ) )
   Case cUF == "AL"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := Mod( nSoma, nMod )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "AP"
        Do Case
           Case cIe1 >= "03000001" .and. cIe1 <= "03017000"
                nSoma := 5; nT2 := 0
           Case cIe1 >= "03017001" .and. cIe1 <= "03019022"
                nSoma := 9; nT1 := 1
           Case cIe1 >= "03019023"
                nSoma := 0; nT2 := 0
        EndCase
        If Substr(cIe1, 1, 2) <> "03"
           Return(.F.)
        EndIf
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := nMod - Mod( nSoma, nMod )
        nD1  := If( nD1 == 10, 0, nD1)
        nD1  := If( nD1 == nMod, nT2, nD1)
        cIe2 += AllTrim( Str( Int( nD1 ) ) )
   Case cUF == "AM"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1 := If( nSoma < nMod, nMod - nSoma,;
                  If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) ) )
        cIe2 += AllTrim( Str( Int( nD1 ) ) )
   Case cUF == "BA" // tem q ser baiano pra ser do contra, eles calculan o 2 dig prim, e usam pro 1 dig
        nMod := If( SubStr( cIe1, 1, 1 ) $ "0123458", 10, 11 )
        cIe2 := SubStr( cIe1, 1, 6 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD2 := If(nMod == 10, nMod - Mod( nSoma, nMod ),;
                  If( nMod - Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) ) )
        cIe2 += AllTrim( Str( Int( nD2 ) ) )
        nSoma := 0
        AEval( aP2, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1 := If(nMod == 10, nMod - Mod( nSoma, nMod ),;
                  If( nMod - Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) ) )
        cIe2 := SubStr( cIe1, 1, 6 ) + AllTrim( Str( Int( nD1 ) ) ) + AllTrim( Str( Int( nD2 ) ) )
   Case cUF == "DF"
        cIe2 := SubStr( cIe1, 1, 11 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := nMod - Mod( nSoma, nMod )
        nD1  := If( nD1 >= 10, 0, nD1 )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
        nSoma := 0
        AEval( aP2, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD2  := nMod - Mod( nSoma, nMod )
        nD2  := If( nD2 >= 10, 0, nD2 )
        cIe2 += Right( Str( Int( nD2 ) ), 1 )
   Case cUF == "CE"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1 := nMod - Mod( nSoma, nMod )
        nD1 := If( nD1 >= 10, 0, nD1 )
        cIe2 += AllTrim( Str( Int( nD1 ) ) )
   Case cUF == "ES"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "GO"  // Essa foi a mais anormal de todas
        nD2 := Val( Right( cIe1, 1 ) )
        cIe2 := SubStr( cIe1, 1, 2 )
        If cIE2 == "10" .OR. cIE2 == "11" .OR. cIE2 == "15" 
           cIe2 := SubStr( cIe1, 1, 8 )
           If cIe1 == "110944020" .OR. cIe1 == "110944021"
              cIe2 := cIe1
            Else
              AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
              Do Case
                 Case Mod( nSoma, nMod ) == 0
                      nD1 := 0
                 Case Mod( nSoma, nMod ) == 1 .AND. cIE2 >= "10103105" .AND. cIE2 <= "10119997"
                      nD1 := 1
                 Case Mod( nSoma, nMod ) == 1 .AND. cIE2 < "10103105" .AND. cIE2 > "10119997"
                      nD1 := 0
                 Case Mod( nSoma, nMod ) > 1
                      nD1 := nMod - Mod( nSoma, nMod )
              EndCase
              cIe2 += Right( Str( Int( nD1 ) ), 1 )
           EndIf
        EndIf
   Case cUF == "MA"
        If Left( cIe1, 2 ) == "12"
           cIe2 := SubStr( cIe1, 1, 8 )
           AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
           nD1 := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
           cIe2 += AllTrim( Str( Int( nD1 ) ) )
        EndIf
   Case cUF == "MG"
        cIe2 := SubStr( cIe1, 1, 3 ) + "0" + Substr( cIe1, 4, 8 ) //0 inutil, 0*2 = 0, pq? 4o. peso.
        AEval( aP1, { |nI, nX| cProd += LTrim( Str( Int( Val( SubStr( cIe2, nX, 1) ) * nI ) ) ) } )
        For nI := 1 to Len( cProd )
            nSoma += Val( SubStr( cProd, nI, 1 ) )
        Next
        cProd := StrZero( nSoma, 3 )
        nD1   := ( Val( SubStr( CProd, 2, 1 ) + "0" ) + 10 ) 
        nD1   -= nSoma
        cIe2  := SubStr( cIe1, 1, 11 ) + Right( Str( Int( nD1 ) ), 1 )
        nSoma := 0
        AEval( aP2, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD2  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD2 ) ), 1 )
   Case cUF == "MS"
        cIe2 := SubStr( cIe1, 1, 08 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1 := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) ) 
        cIe2 += LTrim( Str( Int( nD1 ) ) )
   Case cUF == "MT"
        cIe2 := SubStr( cIe1, 1, 10 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1 := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += LTrim( Str( Int( nD1 ) ) )
   Case cUF == "PA"
        If Left(cIe1, 2) == "15"
           cIe2 := SubStr( cIe1, 1, 8 )
           AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
           nD1 := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
           cIe2 := SubStr( cIe1, 1, 8) + AllTrim( Str( Int( nD1 ) ) )
        EndIf
   Case cUF == "PB"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "PE"
        cIe2 := SubStr( cIe1, 1, 13 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "PI"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += AllTrim( Str( Int( nD1 ) ) )
   Case cUF == "PR"
        cIE2 := SubStr( cIe1, 1, Len( cIe1 ) - 2 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1   := nMod - Mod( nSoma, nMod )
        nD1   := If( nD1 == 10, 0, nD1 )
        cIe2  += AllTrim( Str( Int( nD1 ) ) )
        nSoma := 0
        AEval( aP2,{ |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD2  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "RJ"
        cIe2 := SubStr( cIe1, 1, 7 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "RN"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "RO"
        cIe2 := SubStr( cIe1, 4, 5 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1 := If( Mod( nSoma, nMod )>= 10, 10, 11 ) - Mod( nSoma, nMod )
        cIe2 := SubStr( cIe1, 1, 8) + AllTrim( Str( Int( nD1 ) ) )
   Case cUF == "RR"
        If Substr( cIe1, 1 , 2 ) == "24"
           nMod := 9
           cIe2 := SubStr( cIe1, 1, 8 )
           AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
           nD1  := Mod( nSoma, nMod )
           cIe2 += Right( Str( Int( nD1 ) ), 1 )
        EndIf
   Case cUF == "RS"
        cIe2 := SubStr( cIe1, 1, 9 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "SC"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "SE"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 += Right( Str( Int( nD1 ) ), 1 )
   Case cUF == "SP"
        cIe2 := SubStr( cIe1, 1, 8 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := Mod( nSoma, nMod )
        cIe2 += Right( Str( Int( nD1 ) ), 1 ) + SubStr( cIe1, 10, 2 )
        nSoma := 0
        AEval( aP2, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD2 := If( Mod( nSoma, nMod )>= 10, 10, 11 ) - Mod( nSoma, nMod )
        cIe2 += Right( Str( Int( nD2 ) ), 1 )
   Case cUF == "TO"
        altd()
        cIe2 := SubStr( cIe1, 1, 2 ) + SubStr( cIe1, 5, 6 )
        AEval( aP1, { |nI, nX| nSoma += Val( SubStr( cIe2, nX, 1) ) * nI } )
        nD1  := If( Mod( nSoma, nMod ) <= 1, 0, nMod - Mod( nSoma, nMod ) )
        cIe2 := SubStr( cIe1, 1, 10 ) + Right( Str( Int( nD1 ) ), 1 )
   Otherwise
        Return .F.
EndCase
Return( cIe1 == cIe2 )
Tah na mão Vô Eolo !!!.....

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Validar CPF e CNPJ

Mensagem por Augusto »

sygecom escreveu:Tah na mão Vô Eolo !!!.....
:-O hehe pegou pesado hein ??!!
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Validar CPF e CNPJ

Mensagem por sygecom »

É, postei a forma de cálculo do CPF/CNPJ e também do EAN (13 e 8). Só nunca descobri (nem fui atrás) como é o cálculo das IE Estaduais (talvez seja a mesma "Base 11" do CPF/CNPJ). Se alguém souber, bem que podia postar pra gente ficar sabendo.

Vô Eolo
Tche, foi ele mesmo que colocou.....e acho que não é ofensa....isso significa que deve ser respeitado.....



:xau

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder