VALIDACAO DE CPF

FILIPEBSANTOS 16/02/2011 04:20:38
#365581
Bom dia pessoal!!

Tipo estou criando uma função para validação de CPF, a qual recebe o numero do CPF por uma textbox e ela chama a seguinte função:

Function ValidaCPF(CPF() As String) As Boolean
Dim Digito1(), Digito2(), SomaDigito As Integer
Dim DV1, DV2 As Integer
Dim i, resto As Integer

[ô]Calcular 1º dígito
Digito1(0) = CPF(0) * 10
Digito1(1) = CPF(1) * 9
Digito1(2) = CPF(2) * 8
Digito1(3) = CPF(3) * 7
Digito1(4) = CPF(4) * 6
Digito1(5) = CPF(5) * 5
Digito1(6) = CPF(6) * 4
Digito1(7) = CPF(7) * 3
Digito1(8) = CPF(8) * 2

SomaDigito = 0

For i = 0 To 8
SomaDigito = SomaDigito + Digito1(i)
Next i

resto = SomaDigito Mod 11

If resto < 2 Then
DV1 = 0
Else
DV1 = 11 - resto
End If

[ô]Calcular 2º dígito
Digito2(0) = CPF(0) * 11
Digito2(1) = CPF(1) * 10
Digito2(2) = CPF(2) * 9
Digito2(3) = CPF(3) * 8
Digito2(4) = CPF(4) * 7
Digito2(5) = CPF(5) * 6
Digito2(6) = CPF(6) * 5
Digito2(7) = CPF(7) * 4
Digito2(8) = CPF(8) * 3
Digito2(9) = CPF(9) * 2

SomaDigito = 0

For i = 0 To 9
SomaDigito = SomaDigito + Digito2(i)
Next i

resto = SomaDigito Mod 11

If resto < 2 Then
DV2 = 0
Else
DV2 = 11 - resto
End If

If CPF(9) = DV1 And CPF(10) = DV2 Then
ValidaCPF = True
Else
ValidaCPF = False
End If
End Function


Mas ele retorna o seguinte erro: Compile Error: Type mismatch: array or user-defined type expected

Será quem alguem pode me ajudar?
RODRIGOFERRO 16/02/2011 07:56:18
#365583
Resposta escolhida
Simples, o Parametro esta declarado com array e voce esta passando string Simples...

tente essa abaixo :

Public Function FU_ValidaCPF(CPF As String) As Boolean

Dim soma As Integer
Dim Resto As Integer
Dim I As Integer

[ô][ô]Valida argumento
If Len(CPF) <> 11 Then
FU_ValidaCPF = False
Exit Function
End If


soma = 0
For I = 1 To 9
soma = soma + Val(Mid$(CPF, I, 1)) * (11 - I)
Next I
Resto = 11 - (soma - (Int(soma / 11) * 11))
If Resto = 10 Or Resto = 11 Then Resto = 0
If Resto <> Val(Mid$(CPF, 10, 1)) Then
FU_ValidaCPF = False
Exit Function
End If

soma = 0
For I = 1 To 10
soma = soma + Val(Mid$(CPF, I, 1)) * (12 - I)
Next I
Resto = 11 - (soma - (Int(soma / 11) * 11))
If Resto = 10 Or Resto = 11 Then Resto = 0
If Resto <> Val(Mid$(CPF, 11, 1)) Then
FU_ValidaCPF = False
Exit Function
End If

FU_ValidaCPF = True

End Function


ou ainda essa..

Public Function isCPF(ByVal pCPF As String) As Boolean

Dim Conta As Integer, Soma As Integer, Resto As Integer, Passo As Integer

isCPF = False: pCPF = Trim(pCPF)

If Len(pCPF) <> 11 Then
Exit Function
End If

For Passo = 11 To 12
Soma = 0
For Conta = 1 To Passo - 2
Soma = Soma + Val(Mid(pCPF, Conta, 1)) * (Passo - Conta)
Next

Resto = 11 - (Soma - (Int(Soma / 11) * 11))

If Resto = 10 Or Resto = 11 Then Resto = 0

If Resto <> Val(Mid(pCPF, Passo - 1, 1)) Then
Exit Function
End If
Next

isCPF = True
End Function

[ô] como utilizar

Private Sub Command1_Click()
If isCPF(Text1.Text) = True Then
MsgBox [Ô]CPF é válido[Ô], vbInformation
Else
MsgBox [Ô]CPF é inválido![Ô], vbCritical
End If
End Sub


Abraços
FILIPEBSANTOS 18/02/2011 13:33:17
#365877
Blz! Agora eu to ligado!! Vlw!!!
Tópico encerrado , respostas não são mais permitidas