Ir para conteúdo
Fórum Script Brasil
  • 0

Algum Problema Na Validação De Cpf


MauF

Pergunta

Esse codigo esta perfeito como eu quero, esta verificando o cpf quase certo é ai que ta o proble...

Se eu botar um cpf inválido ele avisa que o cpf é invalido e a apaga o cpf, mas dai quando eu digito novamente o cpf mesbo botando invalido ele não exibe o aleta de cpf inválido...

Esse é o Codigo..

<html>
<head>
<script language="javascript">
var msgCPF = "no";
/*
Validação do CPF através do módulo 11
*/
//função que verifica a veracidade do CPF
function VerificaCPF(nome) {
var CPF = getValue(nome); // Recebe o valor digitado no campo
// Verifica se o campo é nulo
if (CPF == '') {
return false;
}
CPF = Limp(CPF);
total = CPF.length;
for(t=0; t < 10; t++){
cont = 0;
for(a=0; a < total; a++){
 if(CPF.substring(a,a+1)==(t+'')){
  cont++;
  if(cont == 11){alert('CPF inválido.'); return false;}
 }
}
}
// Aqui começa a checagem do CPF
var POSICAO, I, SOMA, DV, DV_INFORMADO;
var DIGITO = new Array(10);
DV_INFORMADO = CPF.substr(9, 2); // Retira os dois últimos dígitos do número informado
// Desemembra o número do CPF na array DIGITO
for (I=0; I<=8; I++) {
DIGITO[I] = CPF.substr( I, 1);
}
// Calcula o valor do 10º dígito da verificação
POSICAO = 10;
SOMA = 0;
for (I=0; I<=8; I++) {
SOMA = SOMA + DIGITO[I] * POSICAO;
POSICAO = POSICAO - 1;
}
DIGITO[9] = SOMA % 11;
if (DIGITO[9] < 2) { DIGITO[9] = 0; }
else{ DIGITO[9] = 11 - DIGITO[9]; }
// Calcula o valor do 11º dígito da verificação
POSICAO = 11;
SOMA = 0;
for (I=0; I<=9; I++) {
SOMA = SOMA + DIGITO[I] * POSICAO;
POSICAO = POSICAO - 1;
}
DIGITO[10] = SOMA % 11;
if (DIGITO[10] < 2) { DIGITO[10] = 0; }
else { DIGITO[10] = 11 - DIGITO[10]; }
// Verifica se os valores dos dígitos verificadores conferem
DV = DIGITO[9] * 10 + DIGITO[10];
if (DV != DV_INFORMADO) {
if(msgCPF == 'no') alert('CPF inválido');
//document.forms[0].CPF.focus();
//document.forms[0].CPF.value = '';
return false;
}
return true;
}

function FormataCPF(nome){
CPF = getValue(nome);
CPF = Limp(CPF);
if(CPF.length == 11){
value = Mascara(CPF, '999.999.999-99');
setValue(nome, value);
msgCPF = 'no';
} else {
if(CPF.length > 0){
 erroValue = ('Verifique o CPF digitado, pois estão faltando ou sobrando números.');
 msgCPF = 'yes';
} else msgCPF = 'no';
}
}
//função para Limpar e deixar somente os números.
function Limp(c){
qtd = c.length;
var v = '';
for (i=0; i < qtd; i++)
for(t=0; t < 10; t++){
 if(c.substring(i,i+1) == t && c.substring(i,i+1) != " ") v += c.substring(i,i+1);}
return(v);
}

/*
Funções para pegar o valor, e atribuir um valor ao campo q às chama.
*/
function getValue(nome){
var obj = eval("document.forms[0]."+nome+".value");
return obj;
}
function setValue(nome, valor){
obj = eval("document.forms[0]."+nome);
obj.value = valor;
}

function Mascara(value, mascara){
tmp = mascara;
guarda = value;
cont = 0;
var caracter = new Array();
var position = new Array();
if(tmp.length > 0){
 qtd = tmp.length;
 for(i=0; i < tmp.length; i++){
  tmpValue = tmp.substring(i,i+1);
  if(tmpValue != 9){
    caracter[cont] = tmpValue;
    position[cont] = i;
    cont++;
  }
 }
 VALOR = value;
 VALOR = Limp(VALOR);
 if(VALOR.length == 0){
  VALOR = '';
 } else {
  var value = '';
  value += VALOR.substring(0,position[0])+caracter[0];
  car = caracter.length;
  for(j=1; j < car; j++)
   value += VALOR.substring(position[j-1]-(j-1),position[j]-j)+caracter[j];
   value += VALOR.substring(position[car-1]-(car-1), qtd);
   VALOR = value;
 }
 return value;
}
return guarda;
}

</script>
</head>
<body onload="document.form.cpf.focus();">
<form name="form">
<input type="text" name="cpf" onchange="VerificaCPF(this.name); FormataCPF(this.name);">
</form>
</body>
</html>

Link para o comentário
Compartilhar em outros sites

22 respostass a esta questão

Posts Recomendados

  • 0

var msgCNPJ = 'no';

//função que verifica a veracidade do CNPJ
function VerificaCNPJ(nome) {
	VALOR = getValue(nome);
	VALOR = Limp(VALOR);
	if(testaCNPJ(VALOR) == 1){
	} else {
  eval("document.forms[0]."+nome+".select()");
  if(msgCNPJ == 'no'){
  	erroValue = ("CNPJ não é válido!");
  	return false;
  }
	}
	FormataCNPJ(nome);
	return true;
}
//função que testa o CNPJ
function testaCNPJ(CNPJ) {
	CNPJ = Limp(CNPJ);
	if(CNPJ.length != 14){return (0);}
	if(isNUMB(CNPJ) != 1) { return(0); }
	else {
  if(CNPJ == 0) { return(0); }
  else {
  	g=CNPJ.length-2;
  	if(RealTestaCNPJ(CNPJ,g) == 1) {
    g=CNPJ.length-1;
    if(RealTestaCNPJ(CNPJ,g) == 1) { return(1); }
    else{return(0);}
  	}else{return(0);}
  }
	}
}
//Função que faz o teste do CNPJ
function RealTestaCNPJ(CNPJ,g){
	var VerCNPJ=0;
	var ind=2;
	var tam;
	for(f=g;f>0;f--){
  VerCNPJ+=parseInt(CNPJ.charAt(f-1))*ind;
  if(ind>8){ ind=2; }
  else { ind++; }
	}
	VerCNPJ%=11;
	if(VerCNPJ==0 || VerCNPJ==1) {VerCNPJ=0;}
	else {VerCNPJ=11-VerCNPJ;}
	if(VerCNPJ!=parseInt(CNPJ.charAt(g))) { return(0); }
	else{return(1);}
}

Vou te mandar agora porque de tarde eu acabo me esquecendo...

é só tu acrescentar no mesmo código q tah o cpf e usar da mesma maneira tb...

VerificaCNPJ(this.name);

Abraço

Crystian

Link para o comentário
Compartilhar em outros sites

  • 0

Só mais uma coisa no valida CPF, mes esqueci...

è que quando ele faz a validaçaõ e e o cpf é invalido ele não apago e cpf tem como fazer isso.. apagar se o cpf for inválido...

Agora vou dar uma saida mas posta ai que quando eu voltar te o u tok...

Um Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0

faz o seguinte, antes do alert de cpf inválido, coloca essa função:

setValue(nome, "");

Essa função seta o valor(que é o segundo parâmetro) no campo informado no primeiro parâmetro. Então você está setando "" (vazio) no campo do cpf...

Entedeu? Qualquer coisa posta ae...

A a função pode ser usada para o cnpj tb...

abraço

Crystian

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela ajuda, agora no cpf ta tudo certo....

Mas no cnpj acho que não ta muito certo, se eu botar um numero menor que 14 ele da cnpj invalido, mas se eu botar 14 dígitos não importa qual é ele passa não da mensagem de erro...

Fico no aguardo..

Um Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

<html>
<head>
<script language="javascript">
var msgCPF = 'no';
var msgCNPJ = 'no';
/*
Validação do CPF através do módulo 11
*/
//função que verifica a veracidade do CPF
function VerificaCPF(nome) {
var CPF = getValue(nome); // Recebe o valor digitado no campo
// Verifica se o campo é nulo
if (CPF == '') {
 return false;
}
CPF = Limp(CPF);
total = CPF.length;
for(t=0; t < 10; t++){
 cont = 0;
 for(a=0; a < total; a++){
  if(CPF.substring(a,a+1)==(t+'')){
   cont++;
   if(cont == 11){alert('CPF inválido.'); return false;}
  }
 }
}
// Aqui começa a checagem do CPF
var POSICAO, I, SOMA, DV, DV_INFORMADO;
var DIGITO = new Array(10);
DV_INFORMADO = CPF.substr(9, 2); // Retira os dois últimos dígitos do número informado
// Desemembra o número do CPF na array DIGITO
for (I=0; I<=8; I++) {
 DIGITO[I] = CPF.substr( I, 1);
}
// Calcula o valor do 10º dígito da verificação
POSICAO = 10;
SOMA = 0;
for (I=0; I<=8; I++) {
 SOMA = SOMA + DIGITO[I] * POSICAO;
 POSICAO = POSICAO - 1;
}
DIGITO[9] = SOMA % 11;
if (DIGITO[9] < 2) { DIGITO[9] = 0; }
else{ DIGITO[9] = 11 - DIGITO[9]; }
// Calcula o valor do 11º dígito da verificação
POSICAO = 11;
SOMA = 0;
for (I=0; I<=9; I++) {
 SOMA = SOMA + DIGITO[I] * POSICAO;
 POSICAO = POSICAO - 1;
}
DIGITO[10] = SOMA % 11;
if (DIGITO[10] < 2) { DIGITO[10] = 0; }
else { DIGITO[10] = 11 - DIGITO[10]; }
// Verifica se os valores dos dígitos verificadores conferem
DV = DIGITO[9] * 10 + DIGITO[10];
if (DV != DV_INFORMADO) {
 if(msgCPF == 'no') alert('CPF inválido');
 //document.forms[0].CPF.focus();
 //document.forms[0].CPF.value = '';
 return false;
}
return true;
}

function FormataCPF(nome){
CPF = getValue(nome);
CPF = Limp(CPF);
if(CPF.length == 11){
 value = Mascara(CPF, '999.999.999-99');
 setValue(nome, value);
 msgCPF = 'no';
} else {
 if(CPF.length > 0){
  erroValue = ('Verifique o CPF digitado, pois estão faltando ou sobrando números.');
  msgCPF = 'yes';
 } else msgCPF = 'no';
}
}
//função para Limpar e deixar somente os números.
function Limp(c){
qtd = c.length;
var v = '';
for (i=0; i < qtd; i++)
 for(t=0; t < 10; t++){
  if(c.substring(i,i+1) == t && c.substring(i,i+1) != " ") v += c.substring(i,i+1);}
return(v);
}

/*
Funções para pegar o valor, e atribuir um valor ao campo q às chama.
*/
function getValue(nome){
var obj = eval("document.forms[0]."+nome+".value");
return obj;
}
function setValue(nome, valor){
obj = eval("document.forms[0]."+nome);
obj.value = valor;
}

function Mascara(value, mascara){
	tmp = mascara;
	guarda = value;
	cont = 0;
	var caracter = new Array();
	var position = new Array();
	if(tmp.length > 0){
  qtd = tmp.length;
  for(i=0; i < tmp.length; i++){
  	tmpValue = tmp.substring(i,i+1);
  	if(tmpValue != 9){
    	caracter[cont] = tmpValue;
    	position[cont] = i;
    	cont++;
  	}
  }
  VALOR = value;
  VALOR = Limp(VALOR);
  if(VALOR.length == 0){
  	VALOR = '';
  } else {
  	var value = '';
  	value += VALOR.substring(0,position[0])+caracter[0];
  	car = caracter.length;
  	for(j=1; j < car; j++)
    value += VALOR.substring(position[j-1]-(j-1),position[j]-j)+caracter[j];
    value += VALOR.substring(position[car-1]-(car-1), qtd);
    VALOR = value;
  }
  return value;
	}
	return guarda;
}

//função que verifica a veracidade do CNPJ
function VerificaCNPJ(nome) {
VALOR = getValue(nome);
VALOR = Limp(VALOR);
if(testaCNPJ(VALOR) == 1){
} else {
 eval("document.forms[0]."+nome+".select()");
 if(msgCNPJ == 'no'){
  setValue(nome, '');
  alert("CNPJ não é válido!");
  return false;
 }
}
FormataCNPJ(nome);
return true;
}
//função que testa o CNPJ
function testaCNPJ(CNPJ) {
CNPJ = Limp(CNPJ);
if(CNPJ.length != 14){return (0);}
if(isNUMB(CNPJ) != 1) { return(0); }
else {
 if(CNPJ == 0) { return(0); }
 else {
  g=CNPJ.length-2;
  if(RealTestaCNPJ(CNPJ,g) == 1) {
   g=CNPJ.length-1;
   if(RealTestaCNPJ(CNPJ,g) == 1) { return(1); }
   else{return(0);}
  }else{return(0);}
 }
}
}
//Função que faz o teste do CNPJ
function RealTestaCNPJ(CNPJ,g){
var VerCNPJ=0;
var ind=2;
var tam;
for(f=g;f>0;f--){
 VerCNPJ+=parseInt(CNPJ.charAt(f-1))*ind;
 if(ind>8){ ind=2; }
 else { ind++; }
}
VerCNPJ%=11;
if(VerCNPJ==0 || VerCNPJ==1) {VerCNPJ=0;}
else {VerCNPJ=11-VerCNPJ;}
if(VerCNPJ!=parseInt(CNPJ.charAt(g))) { return(0); }
else{return(1);}
}
/*
	Função que verifica se é numero.
*/
function isNUMB(c) {
	if((cx=c.indexOf(","))!=-1) { c = c.substring(0,cx)+"."+c.substring(cx+1); }
	if((parseFloat(c) / c != 1)) {
  if(parseFloat(c) * c == 0) { return(1);
  }else{ return(0); }
	} else { return(1);}
}
/*
	Função para formatar o CNPJ
*/
function FormataCNPJ(nome){
	CNPJ = getValue(nome);
	CNPJ = Limp(CNPJ);
	if(CNPJ.length == 14){
  value = Mascara(CNPJ, '99.999.999/9999-99');
    setValue(nome, value);
  msgCNPJ = 'no';
	} else {
  if(CNPJ.length > 0){
  	erroValue = ('Verifique o CNPJ digitado, pois estão faltando ou sobrando números.');
  	msgCNPJ = 'yes';
  } else msgCNPJ = 'no';
	}
}
</script>
</head>
<body onload="document.form.cpf.focus();">
<form name="form">
<input type="text" name="cpf" onchange="VerificaCPF(this.name); FormataCPF(this.name);">
<input type="text" name="cnpj" onchange="VerificaCNPJ(this.name);">
</form>
</body>
</html>

aí tah o código completo...

dá uma olhada, qualquer coisa posta ae...

Abraço

Crystian

Link para o comentário
Compartilhar em outros sites

  • 0

Cara nãp consigo entender ontem tava funcionando tudo certinho, menos o cnpj.

Até mesmo aquele codigo que voce tinha me dado ontem ta dando um problema no cpf.

Agora eu botando 11 digitos mesmo o cpf sendo válido ele da nsg de cpf inválido mas não apagacpf, mas qualquer cpf que eu boto elel da essa mensagem....

E no CNPJ quando eu acesso a tele de cadastro o cursor já sai marcado no cnpj e qualquer numero a - ou a + que eu colocar ele dá invalido, mes se eu botar exatamente 14 digitos ele qualquer nmumero é valido...

Desculpa pela encheção mas eu estou precisando mesmo dessas funções....

Um Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0

Faz o q eu te disse, antes do alert de erro do CPF coloca a função "setValue(nome, '');" que dessa forma você estará setando vazio no campo se der errado.

Coloca no código que funciona...

E coloca esse script no js separado e usa quando precisar, ele não é muito grande, aí você não precisa separar o código, pois tem métodos q os dois ocupam.

Qualquer coisa posta ae

Abraço

Crystian

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que descobri os erros da aqueles erros porque eu botei setValue(nome, ''); se eu botar isso ele não checa mais direito o cpf e nem o cnpj, mas dai eu tirei essa função agora esta funcionando certo, so não esta apagando cpf... ou eu não estou botando o setValue(nome, ''); certo...

Como Faço?

Um Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

o setValue(nome, '') funciona direitinho o q pode estar acontecendo é q ele não tá achando o valor ou o nome. tenta trocar as aspas simples por aspa dupla, e bota um alert antes pra saber o q tah vindo no nome.

Se não conseguir eu refaço as funções e mando pra ti.

Abraço

Crystian

Link para o comentário
Compartilhar em outros sites

  • 0

<html>
<head>
<script language="javascript">
var msgCPF = 'no';
var msgCNPJ = 'no';
/*
Validação do CPF através do módulo 11
*/
//função que verifica a veracidade do CPF
function VerificaCPF(nome) {
var CPF = getValue(nome); // Recebe o valor digitado no campo
// Verifica se o campo é nulo
if (CPF == '') {
 return false;
}
CPF = Limp(CPF);
total = CPF.length;
for(t=0; t < 10; t++){
 cont = 0;
 for(a=0; a < total; a++){
  if(CPF.substring(a,a+1)==(t+'')){
   cont++;
   if(cont == 11){ setValue(nome, ""); alert('CPF inválido.'); return false;}
  }
 }
}
// Aqui começa a checagem do CPF
var POSICAO, I, SOMA, DV, DV_INFORMADO;
var DIGITO = new Array(10);
DV_INFORMADO = CPF.substr(9, 2); // Retira os dois últimos dígitos do número informado
// Desemembra o número do CPF na array DIGITO
for (I=0; I<=8; I++) {
 DIGITO[I] = CPF.substr( I, 1);
}
// Calcula o valor do 10º dígito da verificação
POSICAO = 10;
SOMA = 0;
for (I=0; I<=8; I++) {
 SOMA = SOMA + DIGITO[I] * POSICAO;
 POSICAO = POSICAO - 1;
}
DIGITO[9] = SOMA % 11;
if (DIGITO[9] < 2) { DIGITO[9] = 0; }
else{ DIGITO[9] = 11 - DIGITO[9]; }
// Calcula o valor do 11º dígito da verificação
POSICAO = 11;
SOMA = 0;
for (I=0; I<=9; I++) {
 SOMA = SOMA + DIGITO[I] * POSICAO;
 POSICAO = POSICAO - 1;
}
DIGITO[10] = SOMA % 11;
if (DIGITO[10] < 2) { DIGITO[10] = 0; }
else { DIGITO[10] = 11 - DIGITO[10]; }
// Verifica se os valores dos dígitos verificadores conferem
DV = DIGITO[9] * 10 + DIGITO[10];
if (DV != DV_INFORMADO) {
 if(msgCPF == 'no')alert('CPF inválido');
 setValue(nome, "");
 return false;
}
return true;
}

function FormataCPF(nome){
CPF = getValue(nome);
CPF = Limp(CPF);
if(CPF.length == 11){
 value = Mascara(CPF, '999.999.999-99');
 setValue(nome, value);
 msgCPF = 'no';
} else {
 if(CPF.length > 0){
  alert('Verifique o CPF digitado, pois estão faltando ou sobrando números.');
  msgCPF = 'yes';
 } else msgCPF = 'no';
}
}
//função para Limpar e deixar somente os números.
function Limp(c){
qtd = c.length;
var v = '';
for (i=0; i < qtd; i++)
 for(t=0; t < 10; t++){
  if(c.substring(i,i+1) == t && c.substring(i,i+1) != " ") v += c.substring(i,i+1);}
return(v);
}

/*
Funções para pegar o valor, e atribuir um valor ao campo q às chama.
*/
function getValue(nome){
var obj = eval("document.forms[0]."+nome+".value");
return obj;
}
function setValue(nome, valor){
obj = eval("document.forms[0]."+nome);
obj.value = valor;
}

function Mascara(value, mascara){
	tmp = mascara;
	guarda = value;
	cont = 0;
	var caracter = new Array();
	var position = new Array();
	if(tmp.length > 0){
  qtd = tmp.length;
  for(i=0; i < tmp.length; i++){
  	tmpValue = tmp.substring(i,i+1);
  	if(tmpValue != 9){
    	caracter[cont] = tmpValue;
    	position[cont] = i;
    	cont++;
  	}
  }
  VALOR = value;
  VALOR = Limp(VALOR);
  if(VALOR.length == 0){
  	VALOR = '';
  } else {
  	var value = '';
  	value += VALOR.substring(0,position[0])+caracter[0];
  	car = caracter.length;
  	for(j=1; j < car; j++)
    value += VALOR.substring(position[j-1]-(j-1),position[j]-j)+caracter[j];
    value += VALOR.substring(position[car-1]-(car-1), qtd);
    VALOR = value;
  }
  return value;
	}
	return guarda;
}

//função que verifica a veracidade do CNPJ
function VerificaCNPJ(nome) {
VALOR = getValue(nome);
VALOR = Limp(VALOR);
if(testaCNPJ(VALOR) == 1){
} else {
 eval("document.forms[0]."+nome+".select()");
 if(msgCNPJ == 'no'){
  setValue(nome, '');
  alert("CNPJ não é válido!");
  return false;
 }
}
FormataCNPJ(nome);
return true;
}
//função que testa o CNPJ
function testaCNPJ(CNPJ) {
CNPJ = Limp(CNPJ);
if(CNPJ.length != 14){return (0);}
if(isNUMB(CNPJ) != 1) { return(0); }
else {
 if(CNPJ == 0) { return(0); }
 else {
  g=CNPJ.length-2;
  if(RealTestaCNPJ(CNPJ,g) == 1) {
   g=CNPJ.length-1;
   if(RealTestaCNPJ(CNPJ,g) == 1) { return(1); }
   else{return(0);}
  }else{return(0);}
 }
}
}
//Função que faz o teste do CNPJ
function RealTestaCNPJ(CNPJ,g){
var VerCNPJ=0;
var ind=2;
var tam;
for(f=g;f>0;f--){
 VerCNPJ+=parseInt(CNPJ.charAt(f-1))*ind;
 if(ind>8){ ind=2; }
 else { ind++; }
}
VerCNPJ%=11;
if(VerCNPJ==0 || VerCNPJ==1) {VerCNPJ=0;}
else {VerCNPJ=11-VerCNPJ;}
if(VerCNPJ!=parseInt(CNPJ.charAt(g))) { return(0); }
else{return(1);}
}
/*
	Função que verifica se é numero.
*/
function isNUMB(c) {
	if((cx=c.indexOf(","))!=-1) { c = c.substring(0,cx)+"."+c.substring(cx+1); }
	if((parseFloat(c) / c != 1)) {
  if(parseFloat(c) * c == 0) { return(1);
  }else{ return(0); }
	} else { return(1);}
}
/*
	Função para formatar o CNPJ
*/
function FormataCNPJ(nome){
	CNPJ = getValue(nome);
	CNPJ = Limp(CNPJ);
	if(CNPJ.length == 14){
  value = Mascara(CNPJ, '99.999.999/9999-99');
    setValue(nome, value);
  msgCNPJ = 'no';
	} else {
  if(CNPJ.length > 0){
  	erroValue = ('Verifique o CNPJ digitado, pois estão faltando ou sobrando números.');
  	msgCNPJ = 'yes';
  } else msgCNPJ = 'no';
	}
}
</script>
</head>
<body onload="document.form.cpf.focus();">
<form name="form">
<input type="text" name="cpf" onchange="VerificaCPF(this.name); FormataCPF(this.name);">
<input type="text" name="cnpj" onchange="VerificaCNPJ(this.name);">
</form>
</body>
</html>

MauF arrumei o código pra ti... tah funcionando os dois, pelo menos aqui no mozilla...

Qualquer coisa posta ae...

Abraço

Crystian

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...