Publicado por: hugolt | março 10, 2008

Criar e Validar CPF

 Criar e Validar CPF

Há umas duas semanas eu tenho pensado em pesquisar e escrever um texto pequeno
sobre criação e validação de CPF e RG para postar aqui.

Em várias buscas no Google vi que a validação do RG depende do estado (segundo vários posts em fóruns), tendo cada estado sua maneira de criar/validar o RG.

O meu RG, por exemplo, não seria válido se eu usasse algum validador que exigisse mais ou menos de 9 dígitos (talvez até em um que exigisse 9 dígitos, pois a lógica poderia ser diferente). O ponto chave é que a validação/criação de RG varia de estado para estado (e em alguns estados letras são usadas em conjunto com dígitos no RG).

Assim sendo, não há um padrão brasileiro para RGs, por isso sempre pedem órgão emissor e outras coisas além do RG em si.

Com o CPF (Cadastro de Pessoa Física) é outro esquema, é um padrão brasileiro. Após umas perguntas pro oráculo achei na wikipedia um artigo sobre CPF e um texto do iMasters que eu achei mais negócio aprender.

O CPF tem 11 dígitos, os dois últimos são chamados de dígitos verificadores e são
conseqüência dos 9 anteriores. Isso quer dizer que vc pode idealizar qualquer combinação de 9 dígitos e só precisa calcular os dois últimos dígitos para ter um CPF válido.

O primeiro dígito é o um número que depende do resto da soma de uma multiplicação de cada um dos nove dígitos por 10, 9, … 3, 2 por 11. E a do segundo é o mesmo esquema, porém inclui o primeiro dígito verificador, e a multiplicação começa em 11 (11, 10 … 3, 2).

Matematicamente falando, o primeiro dígito é 0 se o resto da divisao de (10 * a + 9 * b + 8 * c + 7 * d + 6 * e + 5 * f + 4 * g + 3 * h + 2 * i)  por 11 for menor que 2 e é a diferença entre 11 e o resto da divisão caso contrário; sendo abcdefghi os nove primeiros números do CPF.

Para exemplificar vou usar 123456789 como os primeiros nove dígitos do CPF.

Dígitos do CPF 1 2 3 4 5 6 7 8 9
Multiplicadores 10 9 8 7 6 5 4 3 2
Produtos 10 18 24 28 30 30 28 24 18

* Para calcular o primeiro dígito verificador soma-se os produtos e divide por 11. Caso o resto da divisão seja menor que 2 o dígito verificador é 0, senão é a diferença de 11 e o próprio resto.

Com esta tabelinha fica bem mais fácil o cálculo do primeiro dígito verificar, usando módulo 11:
10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 = 210
210 % 11 = 1
Como 1 é menor que 2, o dígito é 0.

Vamos ao próximo dígito verificador.

Dígitos do CPF 1 2 3 4 5 6 7 8 9 0
Multiplicadores 11 10 9 8 7 6 5 4 3 2
Produtos 11 20 27 32 35 36 35 32 27 0

Somando os produtos temos:
11 + 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 = 255
255 % 11 = 2
Como 2 não é menor que 2, o segundo dígito verificador é 11 – 2 = 9.

Assim, o CPF completo é 123456789-09.

Eu acabei escrevendo um programa em C que gera e valida CPFs.

Para usar o programa depois de compilado é bem  fácil, se voce quer validar um cpf entre com a opção ‘-v <CPF>`,
ou se quiser que o programa crie aleatoriamente um CPF entre com a opção `-c`.
O código fonte está aqui.

Exemplo1, validar o CPF criado pelo artigo:

./cpf -v 12345678909 
CPF valido

Exemplo2, criar um CPF:

./cpf -c 
82618741099

Caso queira saber como validar um RG do estado de São Paulo (não garanto a veracidade) acesse esta página.

About these ads

Responses

  1. nao eh q deu certo o.0 vlww!!!

  2. eu não consegui fazeeer, me ajuda aew :’(

  3. eu n teno Site

  4. mto bom em vlw

  5. cpf exemplo acima
    cara vc disse q era para dividir a soma dos porduto por 11. soh q minha soma n tah dando 1 no caso do exemplo. 210/11 =19,09 ?

  6. Resposta para alex:
    Olha só, a divisão feita tem que ser sempre inteira e exata.
    210 / 11 = 19.09, mas se você quiser uma divisão exata terá: 19 e resto 1.

    Quando eu usei o porcentagem eu estava representando o resto de uma divisão inteira.

  7. pow eu ñ consegui sera que vc pode criar um cpf,rg pra min

    me add
    no ms: magnata_poseidon@hotmail.com

  8. ola isso e muito loko

  9. qual o seu endereço para que possa acessar na internet ?

  10. bacana isso ai fiz e deu certo sim!!!
    minha duvida… depois que eu tiver o numero faço oque?
    qual programa é este onde posso pegar para validar o cpf?
    vc me envia?

    • Na verdade eu só escrevi o programa, na linguagem C na época, e deixei o código fonte pra caso alguém tivesse a curiosidade de ver como poderia ser feito.
      Só pra relembrar: o objetivo desse post é apenas mostrar como funciona a lógica da criação de um CPF.
      Não me responsabilizo por nada de errado que alguém faça com essas informações =)

  11. muito bom

  12. boa tarde vc tem um msn ou site!!!!

  13. oi isso é fantasico

  14. ola td bem pergunta basica esse cpf valido posso usar como um cpf normal oq faço apos gera esse numero posso cria uma cedula de cpf me explica essa parte obrigado

  15. um exemplo estou tirando um carro finaciado tenho problemas com o meu cpf atual vc acha que esse gerador de cpf vai poder me ajudar coisa desse tipo cazo esteja validado e posto em cedulas

    • Patrick, o post sobre a criação e validação de CPFs foi criado somente para mostrar como funciona a lógica de uma criação de um número de CPF.
      CPF é um documento oficial, qualquer coisa que você alterar, estará infringindo alguma lei.

      Esqueça a hipótese de criar um CPF e colocar seu nome – como se fosse o dono do número.
      Boa sorte com o financiamento :-)

  16. legal!!!!funciona mesmo!!!peguei um numero de cpf,em uma lista de um concurso.lá eles so fornecem os nove digitos.então calculei,e depois consultei o tal cpf na receita,e o nome do sujeito estava certinho com o do concurso!!!hehehehe!!depois.valeu!!!!!!!

  17. os cpfs todos ja existem manda um novo aew

  18. Ol´, nao estou conseguindo entrar para validar o cpf. que programa é esse C ?

    • esse programa em C valida/cria cpfs. Basta você compila-lo e executar.

  19. nao rola nao…

  20. Não consigo compilar este código fonte…

    estou usando o Dev C++ 4.9.9.2

  21. nao to conseguindo criar um cpf

    me ajuda ae.

  22. Muito bom o artigo, bem detalhado… Parabens Hugolt!!

    Valeu

  23. http://ghiorzi.org/cgcancpf.htm


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Categorias

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d blogueiros gostam disto: