-1

Validação de CPF com PHP e JavaScript

criado por Mauro Luis Ribeiro em 26/07/2002 3:57pm
Agora a função para que vai verificar o cpf.

<?php
if ($cpf != "") {
    $a= substr("$cpf", 0,3);
    $b= substr("$cpf", 4,3);
    $c1= substr("$cpf", 8,3);
    $d= substr("$cpf", 12,2);
    $CPF=$a.$b.$c1.$d;

    $s = $CPF;
    $c =  substr("$s", 0,9);
    $dv = substr("$s", 9,2);
    $d1 = 0;
    for ($i = 0; $i < 9; $i++) {
        $d1 += $c[$i]*(10-$i);
    }

    if ($d1 == 0) {
        $v=1;
        print("CPF Invalido");
    }

    $d1 = 11 - ($d1 % 11);
    if ($d1 > 9) {
        $d1 = 0;
    }
    if ($dv[0] != $d1) {
        $v=$v+1;
        print("CPF Invalido");
    }

    $d1 *= 2;
    for ($i = 0; $i < 9; $i++) {
        $d1 += $c[$i]*(11-$i);
    }
    $d1 = 11 - ($d1 % 11);
    if ($d1 > 9) {
        $d1 = 0;
    }
    if ($dv[1] != $d1) {
        $v=$v+1;
        print("CPF Invalido");
    }

    if ($v == "") {
        print("CPF OK");
    }
}
?>

O código de validação é o mesmo que vocês irão encontrar por aí, a diferença é o acréscimo destas variáveis, que tem a função de eliminar os pontos e o traço do campo input.

<?php
$a= substr("$cpf", 0,3);
$b= substr("$cpf", 4,3);
$c1= substr("$cpf", 8,3);
$d= substr("$cpf", 12,2);
$CPF=$a.$b.$c1.$d;
?>

Depois de separar os números do CPF ele une novamente concatenando todas as variáveis. Simples não, abaixo está o código completo.

<html>
<head>
<script language="JavaScript">
<!--
function mascara_cpf(cpf)
{
    var mycpf = '';
    mycpf = mycpf + cpf;
    if (mycpf.length == 3) {
        mycpf = mycpf + '.';
        document.forms[0].cpf.value = mycpf;
    }
    if (mycpf.length == 7) {
        mycpf = mycpf + '.';
        document.forms[0].cpf.value = mycpf;
    }
    if (mycpf.length == 11) {
        mycpf = mycpf + '-';
        document.forms[0].cpf.value = mycpf;
    }
    if (mycpf.length == 14) {
    }
}
//-->
</script>
</head>
<body>
<form name="Formulario Validacao" action="cpf.php">
CPF: <input type="text" name="cpf" onKeyUp="mascara_cpf(this.value)"  maxlength="14" size="15">
<br><br>
<input type="submit" value="Testar CPF">
</form>
<?php
if ($cpf != "") {
    $a= substr("$cpf", 0,3);
    $b= substr("$cpf", 4,3);
    $c1= substr("$cpf", 8,3);
    $d= substr("$cpf", 12,2);
    $CPF=$a.$b.$c1.$d;

    $s = $CPF;
    $c =  substr("$s", 0,9);
    $dv = substr("$s", 9,2);
    $d1 = 0;
    for ($i = 0; $i < 9; $i++) {
        $d1 += $c[$i]*(10-$i);
    }

    if ($d1 == 0) {
        $v=1;
        print("CPF Invalido");
    }

    $d1 = 11 - ($d1 % 11);
    if ($d1 > 9) {
        $d1 = 0;
    }
    if ($dv[0] != $d1) {
        $v=$v+1;
        print("CPF Invalido");
    }

    $d1 *= 2;
    for ($i = 0; $i < 9; $i++) {
        $d1 += $c[$i]*(11-$i);
    }
    $d1 = 11 - ($d1 % 11);
    if ($d1 > 9) {
        $d1 = 0;
    }
    if ($dv[1] != $d1) {
        $v=$v+1;
        print("CPF Invalido");
    }

    if ($v == "") {
        print("CPF OK");
    }
}
?>
</body>
</html>

É isso, qualquer dúvida por favor publique um comentário abaixo.

Gordo

Comentários:

Mostrando 1 - 10 de 16 comentários
Seguinte:
Dentro de um form com 10 campos a serem preenchidos por exemplo, sendo UM DELES o de CFP, tem como efetuar a VALIDACAO sem te de digitar no botao "TESTAR CPF"???
Ou seja, Tem como: O Usuário ta preenchendo o formulário, dai ele digitaria numeros no campo CPF, qd passasse pro proximo campo automaticamente se daria a verificacao ?
Isso seria mais ou menos travar o prenchimento enqaunto o usuario nao digitasse um CPF válido, entendem ?
Obrigadinha..!
02/03/2006 8:39am (~18 anos atrás)

Diego Jonio disse:
Eu gostaria de entender como é preechida a variavel $cpf no inicio do script php. Como o php pega o campo do imput e inicializa a variável no php.

Se fossem em arquivos separados o valor digitado seria acessado pela variavel $_POST[] ou $_GET[].

Como eu faço para inicializar uma variavel no php com o valor do campo do formulario qdo os dois estão no mesmo arquivo php?
30/09/2005 9:37am (~18 anos atrás)

Navegando pela pagina phpbrasil achei alguns erros em alguns scripts, na realidade não achei nenhum script de validação de cpf plausível ou melhor que funcione perfeitamente, não estou aqui menosprezando os amigos phpbrasil, mas que sirva de alerta aos companheiros.

Se for o caso alguém que tenha um script funcionado perfeitamente repasse a turma mas faça todos os teste primeiro.
Principais erros:
11111111111 nunca foi um cpf valido, mas aparece como valido.
Digite rapidamente121212121212121212 em todos os scripts eles aceitam o cpf como valido sendo que o campo cpf não pode aceitar mais 11 caracteres entre outro que vocês mesmo podem testar
Até a próxima
Fui................................

20/11/2004 3:35pm (~19 anos atrás)

Ola, sou iniciando em PHP e responsavel por um server em sorocaba (www.sorocabanet.com.br)
O código acima, nao parece estar funcionando da forma correta quando eu aplico em minhas páginas. A página nao retorna nenhuma mensagem, independente do que eu digito no formulario.
Por favor, me ajudem...
0brigado
14/08/2004 6:01pm (~19 anos atrás)

Renato Novais disse:
Estava passeiando e vi esse artigo, resolvi pegar o codigo do pessoal e dar uma incrementada. É simples, abaixo vc tem um exemplo de campo data e cpf, só que aceitando apenas numero. É uma colaboração para o artigo legal que o pessoal fez
abraços
<script language="JavaScript">
<!--
//só aceita numero
function eNumero(form){
if (event.keyCode < 48 || event.keyCode > 57){
event.returnValue = false
return false;
}
else {event.returnValue = true; return true;}
}
//mascara para o cpf
tam_cpf = 0;
function mascara_cpf(campo)
{ if (eNumero(campo)){
if (tam_cpf < campo.value.length) //testa se da ultima vez que entrou ele era menor,
{ //i.e. se o cara está adicionando. Se estiver
if (campo.value.length == 3) { //adicionando aih faz os teste e talz se
campo.value = campo.value + '.'; //estiver apagaando num faz nada
}
if (campo.value.length == 7) {
campo.value = campo.value + '.';
}
if (campo.value.length == 11) {
campo.value = campo.value + '-';
}
}
}
tam_cpf = campo.value.length;
}
//mascara da data
tam_data = 0;
function mascara_data(campo)
{ if (eNumero(campo)){
if (tam_data < campo.value.length) //testa se da ultima vez que entrou ele era menor,
{ //i.e. se o cara está adicionando. Se estiver
if (campo.value.length == 2) { //adicionando aih faz os teste e talz se
campo.value = campo.value + '/'; //estiver apagando num faz nada
}
if (campo.value.length == 5) {
campo.value = campo.value + '/';
}
}
}
tam_data = campo.value.length;
}

//-->
</script>

<body>
<form name=formulario>
CPF :
<input type=text name=cpf onkeyPress='mascara_cpf(this)' maxlength=14>
Data:
<input type=text name=data onKeyPress='mascara_data(this)' maxlength=10 >

</form>

<\body>


Renato Novais
30/01/2004 2:25pm (~20 anos atrás)

substitui o codigo em php por esse aqui, é o mesmo do cara mais com um pequeno ajuste, devera funcioná, aew!!!
<?php
if ($cpf != "") {
$a= substr("$cpf", 0,3);
$b= substr("$cpf", 4,3);
$c1= substr("$cpf", 8,3);
$d= substr("$cpf", 12,2);
$CPF=$a.$b.$c1.$d;

$v = 0;
$s = $CPF;
$c = substr("$s", 0,9);
$dv = substr("$s", 9,2);
$d1 = 0;
for ($i = 0; $i < 9; $i++) {
$d1 += $c[$i]*(10-$i);
}

if ($d1 == 0) {
$v=1;
print("CPF Invalido");
}

$d1 = 11 - ($d1 % 11);
if ($d1 > 9) {
$d1 = 0;
}
if ($dv[0] != $d1) {
$v=$v+1;
print("CPF Invalido");
}

$d1 *= 2;
for ($i = 0; $i < 9; $i++) {
$d1 += $c[$i]*(11-$i);
}
$d1 = 11 - ($d1 % 11);
if ($d1 > 9) {
$d1 = 0;
}
if ($dv[1] != $d1) {
$v=$v+1;
print("CPF Invalido");
}

if ($v == 0) {
print("CPF OK");
}
}
?>
08/11/2003 9:02am (~20 anos atrás)

Beunas,

Tche, muito obrigado e sempre que precisar estarei ai para ajudar no que for preciso.

Valeu,

Gordo
28/12/2002 9:43am (~21 anos atrás)

cara.. seu script me ajudou muito ... e a ajuda que todos que deixaram mensagems aqui ...

valeu mesmo .. continue a ajudar esta grande comunidade...
27/12/2002 5:30pm (~21 anos atrás)

Ae galera, quem quiser, este artigos, mais legalzim, ai ta



<html>
<title>Validação de CPF</title>
<head>
<script language="JavaScript">
<!--
function mascara_cpf(cpf) {
var mycpf = '';
mycpf = mycpf + cpf;
if (mycpf.length == 3) {
mycpf = mycpf + '.';
document.forms[0].cpf.value = mycpf;
}
if (mycpf.length == 7) {
mycpf = mycpf + '.';
document.forms[0].cpf.value = mycpf;
}
if (mycpf.length == 11) {
mycpf = mycpf + '-';
document.forms[0].cpf.value = mycpf;
}
if (mycpf.length == 14) {
}
}
//-->
</script>
</head>
<body>
<form name="Formulario Validacao" action="cpf.php">
<font face=verdana size=2>
Coloque aqui o CPF: <input type="text" name="cpf" onKeyUp="mascara_cpf(this.value)" maxlength="14" size="15" style="font-family: verdana; font-size: 10 pt; color: #FF0000; font-weight: bold; border: 1 solid #008000"><br>
(não precisa colocar <font color="#0000FF">&quot;.&quot;</font> e <font color="#0000FF">&quot;-&quot;</font>,
o sistema coloca automaticamente)<br>
<input type="submit" value="Testar CPF" style="font-family: verdana; font-size: 10 pt; font-weight: bold; border: 1 solid #008000">
</form>
<?php
if ($cpf != "") {
$a= substr("$cpf", 0,3);
$b= substr("$cpf", 4,3);
$c1= substr("$cpf", 8,3);
$d= substr("$cpf", 12,2);
$CPF=$a.$b.$c1.$d;
$s = $CPF;
$c = substr("$s", 0,9);
$dv = substr("$s", 9,2);
$d1 = 0;
for ($i = 0; $i < 9; $i++)
{
$d1 += $c[$i]*(10-$i);
}
if ($d1 == 0) {
$v=1;
echo "<script>
alert('CPF Inválido: $cpf')
javascript:history.go(-1)
</script>";
}
$d1 = 11 - ($d1 % 11);
if ($d1 > 9) {
$d1 = 0; }
if ($dv[0] != $d1) {
$v=$v+1;
echo "<script>
alert('CPF Inválido: $cpf')
javascript:history.go(-1)
</script>";
}
$d1 *= 2;
for ($i = 0; $i < 9; $i++) {
$d1 += $c[$i]*(11-$i);
}
$d1 = 11 - ($d1 % 11);
if ($d1 > 9) {
$d1 = 0;
}
if ($dv[1] != $d1)
{
$v=$v+1;
echo "<script>
alert('CPF Inválido: $cpf')
javascript:history.go(-1)
</script>";
}
if ($v == "")
{
echo "<script>
alert('CPF Aceito: $cpf')
javascript:history.go(-1)
</script>";
}
}
?>
</body>
</html>

28/09/2002 4:29pm (~21 anos atrás)

Buenas!

Flávia, vc pode fazer essa autenticação atraves de banco de dados.

Como fazer:

Voce cadastra o user no banco com a devida senha. Ou vc pode cadastrar o usuario pela pagina usando criptografia com a funcao md5()

$senha = md5($senha);

Bom vc ja cadastrou o usuario, agora eh soh verificar se ele eh valido ou nao.

Ex:
$sql=mysql_query("select * from user where Nome='$user'");

while($row=mysql_fetch_array($sql))
{
$nome =$row["Nome"];
$senha =$row["Senha"];

if ($user==$nome and $password==$senha) {
print "Usuario OK";
}
else {
print "Usuario não autorizado";
}
}

Isto eh apenas um exemplo, foi soh pra vc ter uma ideia...se precisar de mais ajuda eh soh falar..

Valeu,

Gordo
18/09/2002 9:57am (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)