O que eu sei é q a soma de todos os números deve formar um nº tipo 11, 22, 33, 44... só q depende de cada estado.
Mas antes vamos entender como é formado o número do CPF.
O CPF é composto por 11 algarismos, sendo os nove primeiros o número propriamente dito e os dois últimos os dígitos verificadores ( criados a partir dos nove primeiros ).
Por exemplo : 123.456.789-XX
E, para descobrirmos quais os dígitos verificadores, seguimos a fórmula - ou algoritmo, como preferirem - indicada pelo Ministério da Fazenda.
Primeiro dígito verificador
O primeiro dígito é calculado multiplicando cada um dos nove primeiros números pelos pesos 10, 9, 8, 7, 6, 5, 4, 3, 2 da seguinte maneira :
CPF 1 2 3 4 5 6 7 8 9
Pesos 10 9 8 7 6 5 4 3 2
Total 10 18 24 28 30 30 28 24 18
Agora, somamos todos os totais obtidos e chegamos a um resultado igual a 210.
Dividimos esse resultado por 11 ( 210 / 11 ) que é igual a 19 ( 11 x 19 = 209 ).
O resto ( 210 - 209 = 1 ) será utilizado para calcular o nosso primeiro dígito verificador, subtraindo 11 - 1 ( o resto ) = 10
Mas ... - sempre tem um mas :) - se o resto for menor ou igual a 1, o dígito verificador será 0 ( zero )
Então o nosso número nesse momento ficaria assim : 123.456.789-0X
Segundo dígito verificador
O cálculo do segundo dígito é semelhante ao primeiro.
Multiplicamos os nove primeiros números e, agora incluindo também o primeiro dígito, pelos pesos 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 da seguinte maneira :
CPF 1 2 3 4 5 6 7 8 9 0
Pesos 11 10 9 8 7 6 5 4 3 2
Total 11 20 27 32 35 36 35 32 27 0
Novamente somamos os totais obtidos e chegamos a um resultado igual a 255.
Dividimos esse resultado também por 11 ( 255 / 11 ) que é igual a 23 ( 11 x 23 = 253 ).
O resto ( 255 - 253 = 2 ) e, em seguida, subtraindo 11 - 2 ( o resto ) que é igual a 9 : o nosso segundo dígito verificador - lembrando que se o resto for menor ou igual a 1, o dígito verificador será 0 ( zero )
Chegamos então ao nosso número do CPF : 123.456.789.09
Existem outras regras que não influenciam propriamente na validação, como por exemplo a região onde foi emitido o CPF (definida pelo nono dígito) mas somente para constar :
1 (DF-GO-MS-MT-TO)
2 (AC-AM-AP-PA-RO-RR)
3 (CE-MA-PI)
4 (AL-PB-PE-RN)
5 (BA-SE)
6 (MG)
7 (ES-RJ)
8 (SP)
9 (PR-SC)
0 (RS)
Ufa ... me desculpem mas a explicação do algoritmo do CPF acaba sendo mais complicada que o próprio script no Flash, mas é sempre bom saber aonde queremos chegar antes de colocar a mão na massa.
Então, vamos ao que interessa :)
1. Crie um campo de texto de entrada ( Input Text ) e instancie como cpf_txt.
2. Crie um botão e instancie como enviar_btn
3. Crie um campo de texto dinâmico ( Dynamic Text ) instancie como retorno_txt
4. Agora vamos criar no timeline principal a ação com o algoritmo do CPF
QUOTE
// Para evitarmos que o usuário digite caracteres não-numéricos
// e que apenas complicaria nosso script
// usamos a propriedade "restrict" como o próprio nome diz
// restringindo a digitação a apenas números
cpf_txt.restrict = "0-9";
//
// indicamos que a ação ao botão de envio
enviar_btn.onRelease = function() {
//criamos arrays dos pesos
Peso1 = [10, 9, 8, 7, 6, 5, 4, 3, 2];
Peso2 = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2];
// criamos um string ( expressão ) para "pegarmos" o valor digitado
cpfVal = new String();
cpfVal = cpf_txt.text;
// criamos as variáveis que nos auxiliarão no cálculo dos dígitos verificadores
soma1 = new Number();
resto1 = new Number();
soma2 = new Number();
resto2 = new Number();
// para enxugar o código ao invés de utilizarmos
// cpfVal.charAt(0) vezes Peso1[0]
// cpfVal.charAt(1) vezes Peso1[1]
// etc
// ou seja o caracter 1 vezes o valor 1 do array ( 1 x 10 )
// ou seja o caracter 2 vezes o valor 2 do array ( 2 x 9 )
// etc
// utilizamos o for com o incremento i ( i++ )
// que significa para i inicialmente igual 0
// o i vai assumindo os valores intermediários = 0, 1, 2, 3, etc
// até i igual ao tamanho do array
// sendo que o i irá indicar tanto a posição do caracter digitado
// como a posição no array do seu respectivo peso
for (i=0; i
// e cada vez que o for incrementa o valor de i
// nossa variável soma1 vai sendo incrementada como os valores
// o incremento se dá por estarmos utilizando o sinal +=
// que significa que soma1 é igual a ela mesmo mais os valores
// de cpfVal.charAt(i) vezes Peso1[i]
//
// o método charAt retorna o valor da posição específica do caracter
// indicado pela variável i
// assim como em Peso1 o i retorna o valor da posição no array
// ressaltando que a primeira posição é 0 ( zero )
soma1 += cpfVal.charAt(i)*Peso1[i];
}
// o cálculo do resto é feito utilizando o operador % ( porcentagem )
// que retorna o resto da divisão da soma por 11
resto1 = soma1%11;
// criamos a condicão para o caso do resultado ser menor ou igual a 1
if (resto1<=1) {
// se for o digito verificador é igual a 0 ( zero )
digito1 = 0;
} else {
// senão é igual a 11 menos o resto
digito1 = 11-resto1;
}
// agora o cálculo do segundo dígito que segue o mesmo padrão anterior
for (j=0; j
soma2 += cpfVal.charAt(j)*Peso2[j];
}
resto2 = soma2%11;
if (resto2<=1) {
digito2 = 0;
} else {
digito2 = 11-resto2;
}
// chegamos então a nossa condição final
// se o décimo digito - cpfVal.charAt(9) - for igual ( o símbolo == ) ao primeiro dígito verificador calculado ou ...
// se o décimo primeiro digito - cpfVal.charAt(10) - for igual ao segundo dígito verificador calculado ou ...
// o tamanho da número digitado for igual de onze algarismos
// lembrando que o charAt(9) indica a décima "casa" ( posição ) porque a primeira "casa" é sempre 0 ( zero )
if (cpfVal.charAt(9) == digito1 && cpfVal.charAt(10) == digito2 && cpfVal.length == 11) {
// se todas as condições estiverem ok
retorno_txt.text = "CPF Válido";
} else {
// senão ...
retorno_txt.text = "CPF Inválido";
}
};
É isso :)
Esse código nada mais é que um cálculo aritmético.
Sabendo onde chegar, o resto é apenas "conta".
Assim dá pra criar validações para CNPJ, Inscrições Estaduais, etc
2006-07-26 01:59:59
·
answer #1
·
answered by Pandora 5
·
1⤊
0⤋