Algoritmo do CPF.pdf

  • Published on
    25-Nov-2015

  • View
    17

  • Download
    0

DESCRIPTION

Thiago Prado Sexta-feira, 06 de agosto de 2004 Algoritmo do CPF Vamos entender um pouco como funciona o algoritmo do CPF. Na primeira parte estudaremos o funcionamento do…

Transcript

Thiago Prado Sexta-feira, 06 de agosto de 2004 Algoritmo do CPF Vamos entender um pouco como funciona o algoritmo do CPF. Na primeira parte estudaremos o funcionamento do cálculo do CPF para validar os dígitos verificadores que fazem a diferenciação de um CPF para outro. Logo abaixo segue um código que faz a validação do CPF, mas mesmo que você queria desenvolver o seu próprio código, em javascript ou outra linguagem, abaixo segue uma breve explicação. Esse algoritmo que é responsável pela validação do CPF foi feito de acordo com a regras do Ministério da Fazenda. Conhecendo o cálculo do algoritmo do CPF O CPF é composto por onze algarismos, onde os dois últimos são chamados de dígitos verificadores, ou seja, os dois últimos dígitos são criados a partir dos nove primeiros. O cálculo é feito em duas etapas utilizando o módulo de divisão 11. Para exemplificar melhor, iremos calcular os dígitos verificadores de um CPF imaginário, por exemplo, 222.333.666-XX. Fazendo o cálculo do primeiro dígito verificador O primeiro dígito é calculado com a distribuição dos dígitos colocando-se os valores 10, 9, 8, 7, 6, 5, 4, 3, 2 conforme a representação abaixo: Números do CPF 2 2 2 3 3 3 6 6 6 Valores definidos para o calculo 10 9 8 7 6 5 4 3 2 Na seqüência multiplicaremos os valores de cada coluna, confira: Números do CPF 2 2 2 3 3 3 6 6 6 Valores definidos para o calculo 10 9 8 7 6 5 4 3 2 Total 20 18 16 21 18 15 24 18 12 Em seguida efetuaremos o somatório dos resultados (20+18+...+18+12), o resultado obtido (162) será divido por 11. Considere como quociente apenas o valor inteiro, o resto da divisão será responsável pelo cálculo do primeiro dígito verificador. Vamos acompanhar: 162 dividido por 11 obtemos 14 de quociente e 8 de resto da divisão. Caso o resto da divisão seja menor que 2, o nosso primeiro dígito verificador se torna 0 (zero), caso contrário subtrai-se o valor obtido de 11, que é nosso caso, sendo assim nosso dígito verificador é 11-8, ou seja, 3 (três), já temos parte do CPF, confira: 222.333.666-3X. Fazendo o cálculo do segundo dígito verificador Para o cálculo do segundo dígito será usado o primeiro dígito verificador já calculado. Montaremos uma tabela semelhante à anterior, só que desta vez usaremos na segunda linha os valores 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, já que estamos incorporando mais um algarismo para esse cálculo. Veja: Números do CPF 2 2 2 3 3 3 6 6 6 3 Valores definidos para o calculo 11 10 9 8 7 6 5 4 3 2 Na próxima etapa faremos como na situação do cálculo do primeiro dígito verificador. Multiplicaremos os valores de cada coluna e efetuaremos o somatório dos resultados obtidos: 22+20+18+24+21+18+30+24+18+4=201. Números do CPF 2 2 2 3 3 3 6 6 6 3 Valores definidos para o calculo 11 10 9 8 7 6 5 4 3 2 Total 22 20 18 24 21 18 30 24 18 6 Agora pegamos esse valor e dividimos por 11. Considere novamente apenas o valor inteiro do quociente, e com o resto da divisão, no nosso caso 3, usaremos para o cálculo do segundo dígito verificador, assim como na primeira parte. Caso o valor do resto da divisão seja menor que 2, esse valor passa automaticamente a ser zero, que é o nosso caso, caso contrário é necessário subtrair o valor obtido de 11 para se obter o dígito verificador. Neste caso chegamos ao final dos cálculos e descobrimos que os dígitos verificadores do nosso CPF hipotético são os números 3 e 8, portanto o CPF ficaria assim: 222.333.666-38. Exemplo pratico da validação do CPF Agora que já conhecemos como funciona o algoritmo do CPF, vamos partir para a programação do nosso código. O nosso código é composto por uma função que vai retornar um valor true ou false para que o formulário seja enviado ou não. Abaixo do código tem uma descrição para um melhor acompanhamento e no fim da matéria um link para o exemplo desenvolvido aqui. Exemplo: 1 2 function validaCPF() { 3 cpf = document.validacao.cpfID.value; 4 erro = new String; 5 if (cpf.length < 11) erro += "Sao necessarios 11 digitos para verificacao do CPF! "; 6 var nonNumbers = /\D/; 7 if (nonNumbers.test(cpf)) erro += "A verificacao de CPF suporta apenas numeros! "; 8 if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){ 9 erro += "Numero de CPF invalido!" 10 } 11 var a = []; 12 var b = new Number; 13 var c = 11; 14 for (i=0; i retornar true, a variável erro é acrescida de um texto referente ao erro. Linha 8 â Verificação se a variável CPFé igual a 11 caracteres repetidos que vão de 0 a 9. Se retornar true, a variável erro é acrescida de um texto referente ao erro. Linha 11 - Declaração da variável a como uma matriz usando literal notation. Linha 12 - Declaração da variável b como novo número. Linha 13 - Declaração da variável c como o valor igual a 11. Linha 14 â Loop que vai ser executado 11 vezes. Linha 15 â A matriz a indexada do valor da variável do loop recebe o caractere da variável CPF indexado do valor da variável do loop. Linha 16 â Verificação se o valor de i é menor que 9. Se retornar true a variável b, é acrescida do valor da matriz a indexada do valor da variável do loop multiplicada pelo valor decrescido da variável c. Linha 18 â Verificação se a variável x (que tem o valor do resto da divisão de b por 11) é menor que 2. Se retornar true, a matriz a indexada de 9 recebe o valor de 0. Se retornar false a matriz a indexada de 9 recebe o valor de 11 menos o valor de x. Linha 19 e 20 â As variáveis b e c são reiniciadas. Linha 21 â Loop que vai ser executado 10 vezes. A variável b é acrescida do valor da matriz a indexada do valor da variável do loop multiplicada pelo valor da variável c decrescido. Linha 22 â Verificação se a variável x (que tem o valor do resto da divisão de b por 11) é menor que 2. Se retornar true a matriz a indexada de 10 recebe o valor de 0. Se retornar false a matriz a indexada de 10 recebe o valor de 11 menos o valor de x. Linha 23 â Verificação se a variável cpf indexada de 9 é diferente da matriz a indexada de 9 e se a variável CPF indexada de 10 é diferente da matriz a indexada de 10. Se retornar true a variável erro é acrescida de um texto referente ao erro. Linha 26 â Verificação se o tamanho da variável erro é maior que 0, se retornar true uma caixa de alerta é mostrada ao usuário com o(s) erro(s) da validação. O formulário retorna falso e não é enviado. Linha 30 â A função retorna true, com isso o formulário é enviado com sucesso. Como a função validaCPF pronta vamos partir para a parte HTML para criar o formulário que suportara o caixa de texto para digitar o numero do CPF. O evento onSubmit do formulário é usado para retornar um valor para verificar se o mesmo vai ser enviado ou nao. Exemplo: 1 2 3 4 5 Digite o numero do CPF sem utilizar os caracteres "." ou "-". Com essa explicação você poderá montar sua própria rotina ou utilizar a que criamos, abaixo segue o link para o exemplo criado aqui. Confira o exemplo do código: validaCPF.htm