Jump to content


- - - - -

Validação De Cpf / Cnpj No Excel










Post sem respostas

#1 BuGs

    Membro - Novato

  • Membros
  • Pip
  • 1 posts
  • Sexo:Masculino
  • Estado:Minas Gerais

Adicionado 14 July 2010 - 04:17 PM

Prezados,

Fuçando na NET achei uma macro em VBA para validação de CPF e CNPJ (Info Abril). Após fazer algumas alterações, com o objetivo de juntar as pesquisas, tive êxito em partes. Não consegui identificar onde está o erro, quando entro com o CPF por exemplo 00123456789 ele aceita como válido tanto o final 89 como o 88, acredito que seja nos arredondamentos mas não consegui identificar onde.
Segue o código:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Dig, Nvar
If Target.Address = Range("B2").Address Then
If IsNumeric(Range("B2")) Then 'se não preencher o campo ignora
Dig = Right(Format(Range("B2"), "00000000000000"), 2)
Nvar = Módulo1.DVCNPJ(Format(Range("B2"), "00000000000000"))
If Dig = Nvar Then
ElseIf Target.Address = Range("B2").Address Then
If IsNumeric(Range("B2")) Then 'se não preencher o campo ignora
Dig = Right(Range("B2"), 2)
Nvar = Módulo1.DVCPF(Format(Range("B2"), "00000000000"))
If Dig = Nvar Then
Else 'senão avisa em vermelho
Range("B2") = "CPF/CNPJ INVÁLIDO"
End If
End If

End If
End If

End If
End Sub

"Modulo 1"

Function DVCNPJ(CNPJ As String) As String


Dim intSoma, intSoma1, intSoma2, intInteiro As Long
Dim intNumero, intMais, i, intResto As Integer
Dim intDig1, intDig2 As Integer
Dim strcampo, strCaracter, StrConf, strCNPJ, strDigVer As String
Dim dblDivisao As Double
intSoma = 0
intSoma1 = 0
intSoma2 = 0
intNumero = 0
intMais = 0


strDigVer = Right(CNPJ, 2)
strcampo = Left(CNPJ, 8)
strCNPJ = Right(CNPJ, 6)
strCNPJ = Left(strCNPJ, 4)
strcampo = Right(strcampo, 4) & strCNPJ

For i = 2 To 9
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
intSoma1 = intSoma1 + intMais
Next i
'Separa os 4 primeiros dígitos do CNPJ
strcampo = Left(CNPJ, 4)
For i = 2 To 5
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
intSoma2 = intSoma2 + intMais
Next i
intSoma = intSoma1 + intSoma2
dblDivisao = intSoma / 11
intInteiro = Int(dblDivisao) * 11
intResto = intSoma - intInteiro
If intResto = 0 Or intResto = 1 Then
intDig1 = 0
Else
intDig1 = 11 - intResto
End If
intSoma = 0
intSoma1 = 0
intSoma2 = 0
intNumero = 0
intMais = 0

strcampo = Left(CNPJ, 8)
strCNPJ = Right(CNPJ, 6)
strCNPJ = Left(strCNPJ, 4)
strcampo = Right(strcampo, 3) & strCNPJ & intDig1

For i = 2 To 9
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
intSoma1 = intSoma1 + intMais
Next i
strcampo = Left(CNPJ, 5)
For i = 2 To 6
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
intSoma2 = intSoma2 + intMais
Next i
intSoma = intSoma1 + intSoma2
dblDivisao = intSoma / 11
intInteiro = Int(dblDivisao) * 11
intResto = intSoma - intInteiro
If intResto = 0 Or intResto = 1 Then
intDig2 = 0
Else
intDig2 = 11 - intResto
End If
StrConf = intDig1 & intDig2
DVCNPJ = StrConf

End Function

Function DVCPF(Cpf As String) As String

Dim lngSoma, lngInteiro As Long
Dim intNumero, intMais, i, intResto As Integer
Dim intDig1, intDig2 As Integer
Dim strDigVer, strcampo, strCaracter, StrConf As String
Dim dblDivisao As Double
lngSoma = 0
intNumero = 0
intMais = 0

strcampo = Left(Cpf, 9)
strDigVer = Right(Cpf, 2)
For i = 2 To 10
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
lngSoma = lngSoma + intMais
Next i
dblDivisao = lngSoma / 11
lngInteiro = Int(dblDivisao) * 11
intResto = lngSoma - lngInteiro
If intResto = 0 Or intResto = 1 Then
intDig1 = 0
Else
intDig1 = 11 - intResto
End If
strcampo = strcampo & intDig1
lngSoma = 0
intNumero = 0
intMais = 0
For i = 2 To 11
strCaracter = Right(strcampo, i - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * i
lngSoma = lngSoma + intMais
Next i
dblDivisao = lngSoma / 11
lngInteiro = Int(dblDivisao) * 11
intResto = lngSoma - lngInteiro
If intResto = 0 Or intResto = 1 Then
intDig2 = 0
Else
intDig2 = 11 - intResto
End If
StrConf = intDig1 & intDig2
DVCPF = StrConf
End Function

Public Function PISPASEP(numero As String)
Dim ftap As String
Dim total As String
Dim i As Integer
Dim resto As Integer

If Val(numero) = 0 Or Len(numero) <> 11 Then
PISPASEP = False
Exit Function
End If

ftap = "3298765432"
total = 0

For i = 1 To 10
total = total + Val(Mid(numero, i, 1)) * Val(Mid(ftap, i, 1))
Next i

resto = Int(total Mod 11)

If resto <> 0 Then
resto = 11 - resto
End If

If resto <> Val(Mid(numero, 11, 1)) Then
PISPASEP = False
Exit Function
End If

PISPASEP = True

End Function





1 usuário(s) esta(ão) lendo este tópico

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)