Esta função é muito útil na validação do CPF passado por parâmetro.
A função também verifica se o CPF está digitado no formato correto utilizando Expressão Regular.
Na função o CPF pode ser digitado em 2 formatos diferentes:
XXXXXXXXX-XX ou XXX.XXX.XXX-XX.
Atualizado em 09/05/2008 por sugestão de fabriciorj.
<% '----------------------------------------------------- 'Funcao: IsCPF(ByVal intNumero) 'Sinopse: Verifica se o valor passado é um CPF válido ' Formatos aceitos: XXX.XXX.XXX-XX ou ' XXXXXXXXXXXXXX 'Parametro: intNumero 'Retorno: Booleano 'Autor: Gabriel Fróes - www.codigofonte.com.br '----------------------------------------------------- Function IsCPF(ByVal intNumero) 'Validando o formato do CPF com expressão regular Set regEx = New RegExp 'Cria o Objeto Expressão regEx.Pattern = "^(d{3}.d{3}.d{3}-d{2})|(d{11})$" ' Expressão Regular regEx.IgnoreCase = True ' Sensitivo ou não regEx.Global = True Retorno = RegEx.Test(intNumero) Set regEx = Nothing 'Caso seja verdadeiro posso validar se o CPF é válido If Retorno = True Then 'Validando a sequencia números Dim CPF_temp CPF_temp = intNumero CPF_temp = Replace(CPF_temp, ".", "") CPF_temp = Replace(CPF_temp, "-", "") CPF_Digito_temp = Right(CPF_temp, 2) 'Somando os nove primeiros digitos do CPF Soma = (Clng(Mid(CPF_temp,1,1)) * 10) + (Clng(Mid(CPF_temp,2,1)) * 9) + (Clng(Mid(CPF_temp,3,1)) * 8) + (Clng(Mid(CPF_temp,4,1)) * 7) + (Clng(Mid(CPF_temp,5,1)) * 6) + (Clng(Mid(CPF_temp,6,1)) * 5) + (Clng(Mid(CPF_temp,7,1)) * 4) + (Clng(Mid(CPF_temp,8,1)) * 3) + (Clng(Mid(CPF_temp,9,1)) * 2) '---------------------------------- 'Calculando o 1º dígito verificador '---------------------------------- 'Pegando o resto da divisão por 11 Resto = (Soma Mod 11) If Resto = 1 Or Resto = 0 Then DigitoHum = 0 Else DigitoHum = Cstr(11-Resto) End If '---------------------------------- '---------------------------------- 'Calculando o 2º dígito verificador '---------------------------------- 'Somando os 9 primeiros digitos do CPF mais o 1º dígito Soma = (Clng(Mid(CPF_temp,1,1)) * 11) + (Clng(Mid(CPF_temp,2,1)) * 10) + (Clng(Mid(CPF_temp,3,1)) * 9) + (Clng(Mid(CPF_temp,4,1)) * 8) + (Clng(Mid(CPF_temp,5,1)) * 7) + (Clng(Mid(CPF_temp,6,1)) * 6) + (Clng(Mid(CPF_temp,7,1)) * 5) + (Clng(Mid(CPF_temp,8,1)) * 4) + (Clng(Mid(CPF_temp,9,1)) * 3) + (DigitoHum * 2) 'Pegando o resto da divisão por 11 Resto = (Soma Mod 11) If Resto = 1 Or Resto = 0 Then DigitoDois = 0 Else DigitoDois = Cstr(11-Resto) End If '---------------------------------- 'Verificando se os digitos são iguais aos digítados. DigitoCPF = Cstr(DigitoHum) & Cstr(DigitoDois) If Cstr(CPF_Digito_temp) = Cstr(DigitoCPF) Then Retorno = True Else Retorno = False End If End If IsCPF = Retorno End Function %>