Bom dia
Tem uma cadastro de clientes onde tenho: Tipo = "Física" e "Jurídica" e o campo: "Documento1" = CPF e CNPJ.
Usando os seguintes código:
O problema é o seguinte, quando eu digito CNPJ: 00342562000198 ou CPF: 03899878452 funciona perfeitamente, mas, quando eu digito 00.342.562/0001-98 ou CPF: 038.998.784-52 não funciona fala CPF ou CNPJ invalido e eles estaão corretos.
Como eu faço para validar o CPF e CNPJ com os pontos e traço?
Tem uma cadastro de clientes onde tenho: Tipo = "Física" e "Jurídica" e o campo: "Documento1" = CPF e CNPJ.
Usando os seguintes código:
- Código:
'******************************************
'Rotinas para cálculo de dígito verificador
'e validação de CNPJ e CPF
'Autor: Luiz Cláudio C. V. Rocha
'******************************************
Public Function fDigCNPJ(CNPJ As String) As String
'Calcula os dígitos verificadores do CNPJ
Dim i As Integer
Dim intFator As Integer
Dim intTotal As Integer
Dim intResto
'Verifica se tem 12 ou 14 dígitos
If Not (Len(CNPJ) = 12 Or Len(CNPJ) = 14) Then
Exit Function
Else
'Verifica se é numérico
If Not IsNumeric(CNPJ) Then
Exit Function
Else
'Trunca o CNPJ em 12 caracteres
CNPJ = Left$(CNPJ, 12)
End If
End If
Inicio:
'Percorre as colunas (de trás para frente),
'multiplicando por seus respectivos fatores
intFator = 2
intTotal = 0
For i = Len(CNPJ) To 1 Step -1
If intFator > 9 Then intFator = 2
intTotal = intTotal + ((CInt(Mid(CNPJ, i, 1)) * intFator))
intFator = intFator + 1
Next i
'Obtém o resto da divisão por 11
i = intTotal Mod 11
'Subtrai 11 do resto
i = 11 - i
'O dígito verificador é i
If i = 10 Or i = 11 Then i = 0
'Concatena ao CNPJ
CNPJ = CNPJ & CStr(i)
If Len(CNPJ) = 13 Then
'Calcula o segundo dígito
GoTo Inicio
End If
'Retorna os dígitos verificadores
fDigCNPJ = Right$(CNPJ, 2)
End Function
Public Function fDigCPF(CPF As String) As String
'Calcula os dígitos verificadores do CPF
Dim i As Integer
Dim intFator As Integer
Dim intTotal As Integer
Dim intResto
'Verifica se tem 9 ou 11 dígitos
If Not (Len(CPF) = 9 Or Len(CPF) = 11) Then
Exit Function
Else
'Verifica se é numérico
If Not IsNumeric(CPF) Then
Exit Function
Else
'Trunca o CPF em 9 caracteres
CPF = Left$(CPF, 9)
End If
End If
Inicio:
'Percorre as colunas (de trás para frente),
'multiplicando por seus respectivos fatores
intFator = 2
intTotal = 0
For i = Len(CPF) To 1 Step -1
intTotal = intTotal + ((CInt(Mid(CPF, i, 1)) * intFator))
intFator = intFator + 1
Next i
'Obtém o resto da divisão por 11
i = intTotal Mod 11
'Subtrai 11 do resto
i = 11 - i
'O dígito verificador é i
If i = 10 Or i = 11 Then i = 0
'Concatena ao CPF
CPF = CPF & CStr(i)
If Len(CPF) = 10 Then
'Calcula o segundo dígito
GoTo Inicio
End If
'Retorna os dígitos verificadores
fDigCPF = Right$(CPF, 2)
End Function
Public Function fCNPJ(CNPJ As String) As Boolean
'Verifica se o CNPJ é válido
Dim strChar As String
'Verifica se tem 14 caracteres
If Not Len(CNPJ) = 14 Then
fCNPJ = False
Exit Function
End If
'Verifica se o dígito verificador confere
strChar = Mid$(CNPJ, 13, 2)
If fDigCNPJ(CNPJ) = strChar Then
fCNPJ = True
Else
fCNPJ = False
End If
End Function
Public Function fCPF(CPF As String) As Boolean
'Verifica se o CPF é válido
Dim strChar As String
'Verifica se tem 11 caracteres
If Not Len(CPF) = 11 Then
fCPF = False
Exit Function
End If
'Verifica se o dígito verificador confere
strChar = Mid$(CPF, 10, 2)
If fDigCPF(CPF) = strChar Then
fCPF = True
Else
fCPF = False
End If
End Function
- Código:
If Me.TipoPessoa = "FÍSICA" Then
If fCPF(Me!Documento1) = False Then
MsgBox "CPF digitado é inválido. Verifique!", vbInformation, "Aviso"
Cancel = True
End If
ElseIf Me.TipoPessoa = "JURÍDICA" Then
If fCNPJ(Me!Documento1) = False Then
MsgBox "CNPJ digitado é inválido. Verifique!", vbInformation, "Aviso"
Cancel = True
End If
Else
Exit Sub
End If
O problema é o seguinte, quando eu digito CNPJ: 00342562000198 ou CPF: 03899878452 funciona perfeitamente, mas, quando eu digito 00.342.562/0001-98 ou CPF: 038.998.784-52 não funciona fala CPF ou CNPJ invalido e eles estaão corretos.
Como eu faço para validar o CPF e CNPJ com os pontos e traço?