Página 3 de 4

Validar CPF e CNPJ

Enviado: 14 Mai 2007 09:01
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

Validar CPF e CNPJ

Enviado: 14 Mai 2007 10:19
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

Validar CPF e CNPJ

Enviado: 14 Mai 2007 11:34
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...

Validar CPF e CNPJ

Enviado: 14 Mai 2007 14:15
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

Validar CPF e CNPJ

Enviado: 14 Mai 2007 14:25
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....

Validar CPF e CNPJ

Enviado: 14 Mai 2007 15:48
por Eolo
Poka,
Essa eu ganhei: to com 56, em agosto emplaco 57, já já sou um 60tão.
Kracas!
Eolo

Validar CPF e CNPJ

Enviado: 14 Mai 2007 17:27
por Netavin
... rapaz ! Com meus 48 ainda estou iniciando o aprendizado de uma nova linguagem!! VFP.
Será que dá tempo de usá-la ?! rsrs
:))

Validar CPF e CNPJ

Enviado: 14 Mai 2007 18:00
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...

Validar CPF e CNPJ

Enviado: 14 Mai 2007 22:07
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.... :{ :{ :{

Validar CPF e CNPJ

Enviado: 15 Mai 2007 16:49
por ederxc
Eolo , pode postar , é sempre bom ter em mãos como o material funciona ! :)Pos

Validar CPF e CNPJ

Enviado: 15 Mai 2007 16:53
por sygecom
Tche, o colega postou ontem....
https://pctoledo.org/forum/viewtopic.php?t=5840

Abraços
Leonardo Machado

Validar CPF e CNPJ

Enviado: 15 Mai 2007 17:20
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

Validar CPF e CNPJ

Enviado: 15 Mai 2007 17:45
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

Validar CPF e CNPJ

Enviado: 15 Mai 2007 17:54
por Augusto
sygecom escreveu:Tah na mão Vô Eolo !!!.....
:-O hehe pegou pesado hein ??!!

Validar CPF e CNPJ

Enviado: 15 Mai 2007 18:00
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