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.
nao eh q deu certo o.0 vlww!!!
By: Felipe on junho 12, 2008
at 5:16 am
eu não consegui fazeeer, me ajuda aew 😥
By: Mary on outubro 30, 2008
at 8:40 pm
eu n teno Site
By: Thiago on novembro 1, 2008
at 8:19 pm
mto bom em vlw
By: Renan on novembro 10, 2008
at 6:36 pm
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 ?
By: alex on novembro 12, 2008
at 6:34 pm
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.
By: hugolt on novembro 12, 2008
at 7:13 pm
pow eu ñ consegui sera que vc pode criar um cpf,rg pra min
me add
no ms: magnata_poseidon@hotmail.com
By: jhon on dezembro 26, 2008
at 9:52 pm
ola isso e muito loko
By: toim on janeiro 4, 2009
at 4:25 pm
qual o seu endereço para que possa acessar na internet ?
By: PAULO on janeiro 13, 2009
at 11:17 pm
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?
By: gisele on fevereiro 12, 2009
at 1:08 am
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 =)
By: hugolt on fevereiro 12, 2009
at 1:50 pm
muito bom
By: kamane on fevereiro 27, 2009
at 5:42 pm
boa tarde vc tem um msn ou site!!!!
By: marcelo on março 24, 2009
at 8:15 pm
oi isso é fantasico
By: marcelo on março 24, 2009
at 8:23 pm
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
By: patrick on março 25, 2009
at 3:49 pm
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
By: patrick on março 25, 2009
at 3:57 pm
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 🙂
By: hugolt on março 25, 2009
at 5:02 pm
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!!!!!!!
By: pedro on maio 27, 2009
at 12:14 pm
os cpfs todos ja existem manda um novo aew
By: alvaro on junho 6, 2009
at 11:20 pm
Ol´, nao estou conseguindo entrar para validar o cpf. que programa é esse C ?
By: Jober on setembro 28, 2009
at 8:05 pm
esse programa em C valida/cria cpfs. Basta você compila-lo e executar.
By: hugolt on setembro 28, 2009
at 8:50 pm
nao rola nao…
By: hugolt on setembro 28, 2009
at 8:50 pm
Não consigo compilar este código fonte…
estou usando o Dev C++ 4.9.9.2
By: EronDF on outubro 6, 2009
at 5:34 am
nao to conseguindo criar um cpf
me ajuda ae.
By: marcos on abril 16, 2010
at 12:23 pm
Muito bom o artigo, bem detalhado… Parabens Hugolt!!
Valeu
By: validar cpf on abril 28, 2010
at 12:17 am
http://ghiorzi.org/cgcancpf.htm
By: dev-ailson on outubro 5, 2010
at 1:22 pm
Cpf é legal
By: Igor on setembro 25, 2015
at 9:16 pm
Bom Dia como tirar Cpf e Rg Mamedy.corretor@gma
By: Paulo on abril 26, 2016
at 12:10 pm
Preciso que fãca um número decpf para mim
By: sergio dos ssntos on maio 24, 2016
at 5:57 am