Escolar Documentos
Profissional Documentos
Cultura Documentos
18
24
21
18
27
24
21
16
CNPJ+DV = 18781203/0001-28
Else
Return False
End If
End Get
End Property
Da mesma forma vou criar duas propriedades para o CNPJ: cnpj() e
isCnpjValido(cnpj), cujo cdigo exibo a seguir:
Public Property cnpj() As String
Get
Return sCNPJ
End Get
Set(ByVal Valor As String)
bValida = ValidaCNPJ(Valor)
If bValida Then
sCNPJ = Valor
Else
Throw (New
System.ArgumentException(msgErro, "Numero do
CNPJ"))
End If
End Set
End Property
Public ReadOnly Property isCnpjValido() As
Boolean
Get
bValida = ValidaCNPJ(cnpj)
If bValida Then
Return True
Else
Return False
End If
End Get
End Property
Falta exibir o cdigo dos mtodo da classe que fazem a validao do CPF e CNPJ.
A funo ValidaCPF() possui o seguinte cdigo:
Private Function ValidaCPF(ByVal CPF As String) As
Boolean
Dim i, x, n1, n2 As Integer
CPF = CPF.Trim
For i = 0 To dadosArray.Length - 1
If CPF.Length <> 14 Or dadosArray(i).Equals(CPF) Then
Return False
End If
Next
'remove a maskara
CPF = CPF.Substring(0, 3) + CPF.Substring(4, 3) +
CPF.Substring(8, 3) + CPF.Substring(12)
For x = 0 To 1
n1 = 0
For i = 0 To 8 + x
n1 = n1 + Val(CPF.Substring(i, 1)) * (10 + x - i)
Next
n2 = 11 - (n1 - (Int(n1 / 11) * 11))
If n2 = 10 Or n2 = 11 Then n2 = 0
If n2 <> Val(CPF.Substring(9 + x, 1)) Then
Return False
End If
Next
Return True
End Function
O mtodo ValidaCNPJ() e o mtodo efetivaValidao() so exibidos a seguir:
Private Function ValidaCNPJ(ByVal CNPJ As String)
As Boolean
Dim i As Integer
Dim valida As Boolean
CNPJ = CNPJ.Trim
For i = 0 To dadosArray.Length - 1
If CNPJ.Length <> 18 Or
dadosArray(i).Equals(CNPJ) Then
Return False
End If
Next
'remove a maskara
CNPJ = CNPJ.Substring(0, 2) + CNPJ.Substring(3, 3) +
CNPJ.Substring(7, 3) + CNPJ.Substring(11, 4) +
CNPJ.Substring(16)
valida = efetivaValidacao(CNPJ)
If valida Then
ValidaCNPJ = True
Else
ValidaCNPJ = False
End If
End Function
Private Function efetivaValidacao(ByVal cnpj As
String)
Dim Numero(13) As Integer
Dim soma As Integer
Dim i As Integer
Dim valida As Boolean
Dim resultado1 As Integer
Dim resultado2 As Integer
For i = 0 To Numero.Length - 1
Para efetuar validao do CPF inclua no evento Click do boto - Valida CPF - o seguinte cdigo:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim cpf1 As New valida_CNPJ_CPF
cpf1.cpf = TextBox1.Text
If cpf1.isCpfValido()
Algoritmo do CNPJ
1 1 2 2 2 3 3 3 0 0 0 1
Valores definidos
para o clculo
5 4 3 2 9 8 7 6 5 4 3 2
1 1 2 2 2
0 0 0 1
Valores definidos
para o clculo
5 4 3 2 9
5 4 3 2
Total
5 4 6 4 18 24 21 18 0 0 0 2
Com os valores encontrados em cada uma das colunas efetuaremos o somatrio, desta
forma: 5+4+6+4+18+24+21+18+0+0+0+2 e com o nmero obtido, nesse caso 102,
realizaremos a diviso por 11 (102/11).
Vamos considerar como quociente somente o valor inteiro, o resto da diviso ser
responsvel pelo clculo do primeiro dgito verificador. Assim sendo, no nosso caso o
resto da diviso o nmero 3.
Neste momento temos a seguinte regra: Caso o resto da diviso seja menor que 2, o
valor do dgito verificador passa a ser 0. Caso contrrio, subtramos o valor de 11 para
obter o dgito, que o nosso caso. Portanto, nosso primeiro dgito verificador (11 - 3)
o nmero 8.
Para seguirmos com a nossa validao tomaremos o CNPJ com o primeiro dgito j
calculado para efetuarmos a validao do segundo e ltimo dgito verificador:
11.222.333/0001-8X.
Fazendo o clculo do segundo dgito verificador
O processo semelhante a primeira etapa, a nica mudana a seqncia de nmeros
que sero alinhados na tabela, como a tabela ficou maior com a presena do dgito j
calculado a seqncia agora tem que ter mais um nmero e ficar assim:
6,5,4,3,2,9,8,7,6,5,4,3 e 2, confira:
Nmeros do CNPJ
1 1 2 2 2 3 3 3 0 0 0 1 8
Valores definidos
para o clculo
6 5 4 3 2 9 8 7 6 5 4 3 2
0 0 0 1 8
Valores definidos
para o clculo
6 5 4 3 2 9
6 5 4 3 2
Total
6 5 8 6 4 27 24 21 0 0 0 3 16
Como voc pode notar efetuamos tambm, como na primeira etapa, a multiplicao das
colunas e faremos agora o somatrio das resultados obtidos:
6+5+8+6+4+27+24+21+0+0+0+3+16. Com o resultado obtido, nesse caso 120,
efetuamos a diviso por 11.
Nessa diviso, assim como no clculo anterior, vamos apenas considerar o valor inteiro
do quociente, pois o clculo do ltimo dgito verificador ser feito com o resto da
diviso seguindo a seguinte regra: caso o resto da diviso seja menor que 2 (dois), esse
valor passa automaticamente a ser zero; caso contrrio, que o nosso caso, subtrai-se o
resto de 11 para obter o valor do ltimo dgito verificador, acompanhe: 120/11=10 com
resto 10, 11-10 dgito verificador 1 - Nosso CNPJ agora completo 11.222.333/0001-81.
Exemplo pratico da validao do CNPJ
Agora que j conhecemos como funciona o algoritmo do CNPJ, vamos partir para a
programao do nosso cdigo, o nosso cdigo composto por uma funo que vai
retornar um valor true ou false para que o formulrio seja enviado ou no. Abaixo do
cdigo tem uma descrio para um melhor acompanhamento e no fim da matria um
link para o exemplo desenvolvido aqui.
1 <script language="Javascript">
2
function validaCNPJ() {
3
CNPJ = document.validacao.CNPJID.value;
4
erro = new String;
5
if (CNPJ.length < 18) erro += " necessario preencher corretamente o
nmero do CNPJ! \n\n";
6
if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) !=
"/") || (CNPJ.charAt(15) != "-")){
7
if (erro.length == 0) erro += " necessrio preencher corretamente o nmero
do CNPJ! \n\n";
8
}
9
//substituir os caracteres que no so nmeros
10
if(document.layers && parseInt(navigator.appVersion) == 4){
11
x = CNPJ.substring(0,2);
12
x += CNPJ. substring (3,6);
13
x += CNPJ. substring (7,10);
14
x += CNPJ. substring (11,15);
15
x += CNPJ. substring (16,18);
16
CNPJ = x;
17
} else {
18
CNPJ = CNPJ. replace (".","");
19
CNPJ = CNPJ. replace (".","");
20
CNPJ = CNPJ. replace ("-","");
21
CNPJ = CNPJ. replace ("/","");
22
}
23
var nonNumbers = /\D/;
24
if (nonNumbers.test(CNPJ)) erro += "A verificao de CNPJ suporta apenas
nmeros! \n\n";
25
var a = [];
26
var b = new Number;
27
var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
28
for (i=0; i<12; i++){
29
a[i] = CNPJ.charAt(i);
30
b += a[i] * c[i+1];
31 }
32
if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
33
b = 0;
34
for (y=0; y<13; y++) {
35
b += (a[y] * c[y]);
36
}
37
if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
38
if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
39
erro +="Dgito verificador com problema!";
40
}
41
if (erro.length > 0){
42
alert(erro);
43
return false;
44
} else {
45
alert("CNPJ valido!");
46
}
47
return true;
48
}
49 </script>
Linha 3 Declarao da varivel CNPJ responsvel por recuperar o valor do campo que
contem o nmero do CNPJ.
Linha 5 Verificao se o tamanho da varivel menor que 18. Se retonar true a
varivel erro vai ser Verificao com um texto referente ao erro.
Linha 6 Verificao se o CNPJ foi preenchido corretamente com os nmeros e dgitos
extras. Se retornar true uma nova verificacao sera feita para saber se o tamanho da
varivel erro igual a 0, se retonar true a varivel erro vai ser incrementada com um
texto referente ao erro.
Obs.: A verificao se se o tamanho da varivel erro igual a 0 para no repetir a
mesma mensagem de erro.
Linha 10 Verificao se o navegador o Netscape 4. Se retornar true, a varivel x
ficar responsvel por recuperar os valores das partes da varivel CNPJ. O propsito
disso seria retirar os caracteres extras como ., / e -. Ao final, a mesma varivel
CNPJ recebe o valor de x, assim ficando apenas com nmeros.
Se o navegador no for o Netscape 4, o mtodo replace sera utilizado para substituir os
caracteres extras por espao vazio, assim ficando apenas nmeros na varivel CNPJ.
Linha 23 Declarao da varivel nonNumbers utilizando expresso regular.
Linha 24 Verificao se a varivel CNPJ contm algum caractere que no seja
nmero. Se retonar true, a varivel erro vai ser incrementada com um texto referente ao
erro.
Linha 25 Declarao da matriz a;
Como a funo validaCNPJ pronta, vamos partir para a parte HTML com a criao do
formulrio que suportara o caixa de texto para digitar o nmero do CNPJ. O evento
onSubmit do formulrio usado para retornar um valor para verificar se o mesmo vai
ser enviado.
1 <form action="validaCNPJ.htm" name="validacao" onSubmit="return
validaCNPJ()">
2
<input type="text" name="CNPJID" id="CNPJID" size="25" maxlength="18">
3
<input name="Submit" type="submit" value="enviar">
4 </form>
5 Digite o nmero do CNPJ com os caracteres ".", "/" ou "-".
6 Ex. 03.335.456/0001-45
Com essa explicao, voc poder montar sua prpria rotina ou utilizar a que criamos.
Abaixo segue o link para o exemplo criado aqui.
Confira o exemplo do cdigo: validaCNPJ.htm.
Crditos: Parte deste artigo foi retirado do site Clube da Informtica, com alteraes e
informaes adicionadas por mim.
Valeu galera e at a prxima semana!