quinta-feira, 17 de novembro de 2011

Dois Últimos Dígitos do CPF


. . -

Para quem sabe ler, meia palavra basta; para quer sabe matemática, apenas 9 dos 11 dígitos do Cadastro de Pessoas Físicas (CPF) bastam - os outros 2, nós descobrimos. A verdade é que estes dois últimos dígitos são os chamados "dígitos verificadores". Eles dependem dos outros 9. Em outras palavras, existe uma relação matemática entre os primeiros 9 e os 2 últimos.

Vamos ver então qual é esta relação:

Consideremos o CPF com os seguintes dígitos:

a1 a2 a3 . a4 a5 a6 . a7 a8 a9 - b1 b2

Para descobrirmos o dígito b1, procedemos da seguinte maneira:
multiplicamos o primeiro por 1, o segundo por 2, o terceiro por 3, o quarto por 4 e vamos assim até multiplicarmos o nono por 9. Então, somamos tudo isto. Após termos somado tudo, dividimos por 11. O dígito b1 será o resto da divisão.

A nível de ensino fundamental e médio, a conta é a seguinte:

b1 é o resto de:

Com notação de faculdade, poderia ser assim:


Já para o segundo dígito verificador, temos o seguinte:
multiplicamos o primeiro por 9, o segundo por 8, o terceiro por 7, o quarto por 6 e vamos assim até multiplicarmos o nono por 1. Então, somamos tudo isto e dividimos por 11. O dígito b2 será o resto da divisão.

Fundamental ou médio:

b2 é o resto de:


Superior:


A calculadora no começo da postagem confere automaticamente um CPF: insira os 9 primeiros dígitos para ver qual seria os dois últimos.

Se alguém te informar um CPF e você jogar ele nesta página e os dois últimos dígitos derem errado, provavelmente esta pessoa inventou este CPF ou errou algum dígito. Se der certo não quer dizer nada - pode ser que ela conheça esta regra também. Alternativamente, pode-se utilizar esta página para criar um CPF que passe neste teste também.

7 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. GOSTEI, BOM TRABALHO, O BRASIL PRECISA DE PESSOAS ASSIM COMO VC
    ESTAVA COM UM CPF E A PESSOA ESQUECEU DE PASSAR OS ULTIMOS NUMEROS PARA MIM, VIM AQUI E RESOLVI O PROBLEMA. OBRIGADO

    ResponderExcluir
  3. O meu não deu certo. Pois o final é 00 e apareceu 01

    ResponderExcluir
  4. Montei aqui no excel,mas não deu certo, tem como disponibilizar aqui uma planilha? ou enviar por e-mail eduardo.auditoria arroba outlook.com.br

    Grato,

    eduardo

    ResponderExcluir
  5. 6 6 5 6 2 6 1 9 2
    //Multiplicador --> x10 x9 x8 x7 x6 x5 x4 x3 x2
    // Total --> 60 + 54 + 40 + 42 + 12 + 30 + 4 + 27 + 4 = 273

    for ( $i = 0; $i < strlen( $digitos ); $i++ ) {
    $soma_digitos = $soma_digitos + ( $digitos[$i] * $posicoes );
    $posicoes--;
    }

    // Captura o resto da divisão entre $soma_digitos dividido por 11
    // Ex.: 273 % 11 = 9
    $soma_digitos = $soma_digitos % 11;

    // Verifica se $soma_digitos é menor que 2
    if ( $soma_digitos < 2 ) {
    // $soma_digitos agora será zero
    $soma_digitos = 0;
    } else {
    // Se for maior que 2, o resultado é 11 menos $soma_digitos
    // Ex.: 11 - 9 = 2
    // Nosso dígito procurado é 2
    $soma_digitos = 11 - $soma_digitos;
    }

    //Já temos o valor de b1
    $b1 = $soma_digitos;

    //Zerando
    $soma_digitos = 0;

    //##########Calcula b2
    // 6 6 5 6 2 6 1 9 2
    // x11 x10 x9 x8 x7 x6 x5 x4 x3
    // 66 + 60 + 45 + 48 + 14 + 36 + 5 + 36 + 6 = 316

    for ( $i = 0; $i < strlen($digitos); $i++) {
    $soma_digitos = $soma_digitos + ( $digitos[$i] * $posicoes );
    $posicoes--;
    }

    // Captura o resto da divisão entre $soma_digitos dividido por 11
    // Ex.: 316 % 11 = 8
    $soma_digitos = $soma_digitos % 11;

    // Verifica se $soma_digitos é menor que 2
    if ( $soma_digitos < 2 ) {
    // $soma_digitos agora será zero
    $soma_digitos = 0;
    } else {
    // Se for maior que 2, o resultado é 11 menos $soma_digitos
    // Ex.: 11 - 9 = 2
    // Nosso dígito procurado é 2
    $soma_digitos = 11 - $soma_digitos;
    }


    // Temos b2
    $b2 = $soma_digitos;

    // Retorna
    return "CPF: " . $digitos . "-".$b1 . $b2;
    }

    //Digite seu cpf com 9 dígitos
    $digitos = "123456789";

    echo calculaDV( $digitos );

    ?>

    Fonte: https://www.somatematica.com.br/faq/cpf.php

    ResponderExcluir

Obrigado por comentar.