Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

egalauber

[Resolvido] Problema em formatar CNPJ

Recommended Posts

estou tentando fazer um formulário q vá formatando o q o usuário vai digitando.

alguns campos funcionam beleza mas o cnpj não.

 

é difícil de explicar o q acontece, copiem essa parte do código e testem aí rapidinho q vocês vão ver na hora!!

 

reparei q este problema acontece quando tenho 3 objetos seguidos, (3 .) ou (3 -) ou (3 /), como no cnpj tem 3 pontos e só depois um ífem (99.999.999.9999-99)

 

 

ajudem aí galera!!!

agradeço

 

 

 

<script language="javascript">

function txtBoxFormat(objeto, sMask, evtKeyPress) {

var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;

 

 

if(document.all) { // Internet Explorer

nTecla = evtKeyPress.keyCode;

} else if(document.layers) { // Nestcape

nTecla = evtKeyPress.which;

} else {

nTecla = evtKeyPress.which;

if (nTecla == 8) {

return true;

}

}

 

sValue = objeto.value;

 

// Limpa todos os caracteres de formatação que

// já estiverem no campo.

sValue = sValue.toString().replace( "-", "" );

sValue = sValue.toString().replace( "-", "" );

sValue = sValue.toString().replace( ".", "" );

sValue = sValue.toString().replace( ".", "" );

sValue = sValue.toString().replace( "/", "" );

sValue = sValue.toString().replace( "/", "" );

sValue = sValue.toString().replace( ":", "" );

sValue = sValue.toString().replace( ":", "" );

sValue = sValue.toString().replace( "(", "" );

sValue = sValue.toString().replace( "(", "" );

sValue = sValue.toString().replace( ")", "" );

sValue = sValue.toString().replace( ")", "" );

sValue = sValue.toString().replace( " ", "" );

sValue = sValue.toString().replace( " ", "" );

fldLen = sValue.length;

mskLen = sMask.length;

 

i = 0;

nCount = 0;

sCod = "";

mskLen = fldLen;

 

while (i <= mskLen) {

bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/") || (sMask.charAt(i) == ":"))

bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

 

if (bolMask) {

sCod += sMask.charAt(i);

mskLen++;

}

else {

sCod += sValue.charAt(nCount);

nCount++;

}

 

i++;

}

 

objeto.value = sCod;

 

if (nTecla != 8) { // backspace

if (sMask.charAt(i-1) == "9") { // apenas números...

return ((nTecla > 47) && (nTecla < 58)); }

else { // qualquer caracter...

return true;

}

}

else {

return true;

}

}

</script>

 

<form action="cadastrando cliente.php" method="post" name="cadastrocliente">

<input type="text" name="telefone" onKeyPress="return txtBoxFormat(this, '(99)9999-9999', event);" maxlength="13" size="25" />

<br>

<input type="text" name="celular" onKeyPress="return txtBoxFormat(this, '(99)9999-9999', event);" maxlength="13" size="25" />

<br>

<input type="text" name="cpf" onKeyPress="return txtBoxFormat(this, '999.999.999-99', event);" maxlength="14" size="25" />

<br>

<input type="text" name="cnpj" onKeyPress="return txtBoxFormat(this, '99.999.999.9999-99', event);" maxlength="18" size="25" />

<br>

</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, tá f*** revisar esse código seu aqui, poderia postar ele mais comentado? não se esqueça de postar seus códigos entre as tags (code) e (/code) (com colchetes ao invés de parenteses).

 

desconfio que haja algum erro nos contadores, dê uma revisada neles.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha essas máscaras com ER..

function mascara(o,f){
	v_obj=o
	v_fun=f
	setTimeout("execmascara()",1)
}
function execmascara(){
	v_obj.value=v_fun(v_obj.value)
}
function mcep(v){
	v=v.replace(/\D/g,"")					//Remove tudo o que não é dígito
	v=v.replace(/^(\d{5})(\d)/,"$1-$2") //Esse é tão fácil que não merece explicações
	return v
}
function telefone(v){
	v=v.replace(/\D/g,"")				 //Remove tudo o que não é dígito
	v=v.replace(/^(\d\d)(\d)/g,"($1) $2") //Coloca parênteses em volta dos dois primeiros dígitos
	v=v.replace(/(\d{4})(\d)/,"$1-$2")	//Coloca hífen entre o quarto e o quinto dígitos
	return v
}
function mcnpj(v){
	v=v.replace(/\D/g,"")						   //Remove tudo o que não é dígito
	v=v.replace(/^(\d{2})(\d)/,"$1.$2")			 //Coloca ponto entre o segundo e o terceiro dígitos
	v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3") //Coloca ponto entre o quinto e o sexto dígitos
	v=v.replace(/\.(\d{3})(\d)/,".$1/$2")		   //Coloca uma barra entre o oitavo e o nono dígitos
	v=v.replace(/(\d{4})(\d)/,"$1-$2")			  //Coloca um hífen depois do bloco de quatro dígitos
	return v
}
function mcpf(v){
	v=v.replace(/\D/g,"")					//Remove tudo o que não é dígito
	v=v.replace(/(\d{3})(\d)/,"$1.$2")	   //Coloca um ponto entre o terceiro e o quarto dígitos
	v=v.replace(/(\d{3})(\d)/,"$1.$2")	   //Coloca um ponto entre o terceiro e o quarto dígitos
											 //de novo (para o segundo bloco de números)
	v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2") //Coloca um hífen entre o terceiro e o quarto dígitos
	return v
}
function mdata(v){
	v=v.replace(/\D/g,"");					//Remove tudo o que não é dígito
	v=v.replace(/(\d{2})(\d)/,"$1/$2");	   
	v=v.replace(/(\d{2})(\d)/,"$1/$2");	   
											 
	v=v.replace(/(\d{2})(\d{2})$/,"$1$2");
	return v;
}
function mhorario(v){
	v=v.replace(/\D/g,"");					//Remove tudo o que não é dígito
	v=v.replace(/(\d{2})(\d)/,"$1h$2");	   
	
	return v;
}
function mrg(v){
	v=v.replace(/\D/g,"");					//Remove tudo o que não é dígito

	return v;
}
e para chamar basta:

<input type="text"  maxlength="14" onkeypress="mascara(this,mcpf)" size="16"  />
<input type="text"  maxlength="5" onkeypress="mascara(this,mhorario)" size="6"  />
Sendo que o segundo parâmetro é o nome da função da máscara.

Tem bastante ai...

Compartilhar este post


Link para o post
Compartilhar em outros sites

usei outro script e funcionou!!

 

só q este script não funciona muito bem no Firefox. Vou fazer outro tópico para isso!

 

segue o script:

 

 

<script language="javascript">
// JavaScript Document
//adiciona mascara de cnpj
function MascaraCNPJ(cnpj){
	if(mascaraInteiro(cnpj)==false){
		event.returnValue = false;
	}	
	return formataCampo(cnpj, '00.000.000/0000-00', event);
}

//adiciona mascara ao CPF
function MascaraCPF(cpf){
	if(mascaraInteiro(cpf)==false){
		event.returnValue = false;
	}	
	return formataCampo(cpf, '000.000.000-00', event);
}


//valida o CPF digitado
function ValidarCPF(Objcpf){
	var cpf = Objcpf.value;
	exp = /\.|\-/g
	cpf = cpf.toString().replace( exp, "" ); 
	var digitoDigitado = eval(cpf.charAt(9)+cpf.charAt(10));
	var soma1=0, soma2=0;
	var vlr =11;
	
	for(i=0;i<9;i++){
		soma1+=eval(cpf.charAt(i)*(vlr-1));
		soma2+=eval(cpf.charAt(i)*vlr);
		vlr--;
	}	
	soma1 = (((soma1*10)%11)==10 ? 0:((soma1*10)%11));
	soma2=(((soma2+(2*soma1))*10)%11);
	
	var digitoGerado=(soma1*10)+soma2;
	if(digitoGerado!=digitoDigitado && cpf != ""){  
		alert('CPF Invalido!');		
		Objcpf.focus();
		}
}

//valida numero inteiro com mascara
function mascaraInteiro(){
	if (event.keyCode < 48 || event.keyCode > 57){
		event.returnValue = false;
		return false;
	}
	return true;
}

//valida o CNPJ digitado
function ValidarCNPJ(ObjCnpj){
	var cnpj = ObjCnpj.value;
	var valida = new Array(6,5,4,3,2,9,8,7,6,5,4,3,2);
	var dig1= new Number;
	var dig2= new Number;
	
	exp = /\.|\-|\//g
	cnpj = cnpj.toString().replace( exp, "" ); 
	var digito = new Number(eval(cnpj.charAt(12)+cnpj.charAt(13)));
		
	for(i = 0; i<valida.length; i++){
		dig1 += (i>0? (cnpj.charAt(i-1)*valida[i]):0);	
		dig2 += cnpj.charAt(i)*valida[i];	
	}
	dig1 = (((dig1%11)<2)? 0:(11-(dig1%11)));
	dig2 = (((dig2%11)<2)? 0:(11-(dig2%11)));
	
	if(((dig1*10)+dig2) != digito && cnpj != ""){	
		alert('CNPJ Invalido!');
		ObjCnpj.focus();
		}
}

//formata de forma generica os campos
function formataCampo(campo, Mascara, evento) { 
	var boleanoMascara; 
	
	var Digitato = evento.keyCode;
	exp = /\-|\.|\/|\(|\)| /g
	campoSoNumeros = campo.value.toString().replace( exp, "" ); 
   
	var posicaoCampo = 0;	 
	var NovoValorCampo="";
	var TamanhoMascara = campoSoNumeros.length;; 
	
	if (Digitato != 8) { // backspace 
		for(i=0; i<= TamanhoMascara; i++) { 
			boleanoMascara  = ((Mascara.charAt(i) == "-") || (Mascara.charAt(i) == ".")
								|| (Mascara.charAt(i) == "/")) 
			boleanoMascara  = boleanoMascara || ((Mascara.charAt(i) == "(") 
								|| (Mascara.charAt(i) == ")") || (Mascara.charAt(i) == " ")) 
			if (boleanoMascara) { 
				NovoValorCampo += Mascara.charAt(i); 
				  TamanhoMascara++;
			}else { 
				NovoValorCampo += campoSoNumeros.charAt(posicaoCampo); 
				posicaoCampo++; 
			  }			
		  }	 
		campo.value = NovoValorCampo;
		  return true; 
	}else { 
		return true; 
	}
}




function ValidaEmail()
{
  var obj = eval("document.cadastrocliente.email");
  var txt = obj.value;
  if ((txt.length != 0) && ((txt.indexOf("@") < 1) || (txt.indexOf('.') < 7)))
  {
	alert('Este email parece ser um email inválido. Por favor digite outro!');
	obj.focus();
  }
}


function Valida(){

var nome = document.cadastrocliente.nome.value;
var telefone = document.cadastrocliente.telefone.value;
var celular = document.cadastrocliente.celular.value;
var cnpj = document.cadastrocliente.cnpj.value;
var cpf = document.cadastrocliente.cpf.value;
var email = document.cadastrocliente.email.value;

if(nome != "" && telefone != "" && celular != "" && documento != "" && endereco != "" && bairro != "" && cidade != "" && pergunta != "x" && resposta != "" && email != "" && senha != "" && confirmaSenha != ""){
 document.cadastrocliente.envia.disabled = false;
 return
}
}

//função que restringe caracteres digitados. Números ou letras
function valida_digitos(Ncampo)
{
		 //caracteres permitidos
		 if(Ncampo=="nome")
		 er=/[0-9]/;
		 if(Ncampo=="telefone" || Ncampo=="celular")
		 er=/[a-z]/;
		 digito=document.getElementById(Ncampo).value;
		 var tempor;
		 
		  for (var i=0;i<digito.length; i++) {
			tempor = digito.substring(i,i+1); 
			//se digitos não igual aos caracteres informado na variavel digitos, então é deletado
			  if (er.test(digito)) {
			  document.getElementById(Ncampo).value=digito.substring(0,digito.length-1);
			 
			 return false;
			  break;
			}
   		}
 }


function txtBoxFormat(objeto, sMask, evtKeyPress) {
	var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;


if(document.all) { // Internet Explorer
	nTecla = evtKeyPress.keyCode;
} else if(document.layers) { // Nestcape
	nTecla = evtKeyPress.which;
} else {
	nTecla = evtKeyPress.which;
	if (nTecla == 8) {
		return true;
	}
}

	sValue = objeto.value;

	// Limpa todos os caracteres de formatação que
	// já estiverem no campo.
	sValue = sValue.toString().replace( "-", "" );
	sValue = sValue.toString().replace( "-", "" );
	sValue = sValue.toString().replace( ".", "" );
	sValue = sValue.toString().replace( ".", "" );
	sValue = sValue.toString().replace( "/", "" );
	sValue = sValue.toString().replace( "/", "" );
	sValue = sValue.toString().replace( ":", "" );
	sValue = sValue.toString().replace( ":", "" );
	sValue = sValue.toString().replace( "(", "" );
	sValue = sValue.toString().replace( "(", "" );
	sValue = sValue.toString().replace( ")", "" );
	sValue = sValue.toString().replace( ")", "" );
	sValue = sValue.toString().replace( " ", "" );
	sValue = sValue.toString().replace( " ", "" );
	fldLen = sValue.length;
	mskLen = sMask.length;

	i = 0;
	nCount = 0;
	sCod = "";
	mskLen = fldLen;

	while (i <= mskLen) {
	  bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/") || (sMask.charAt(i) == ":"))
	  bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

	  if (bolMask) {
		sCod += sMask.charAt(i);
		mskLen++;
	  }
	  else {
		sCod += sValue.charAt(nCount);
		nCount++;
	  }

	  i++;
	}

	objeto.value = sCod;

	if (nTecla != 8) { // backspace
	  if (sMask.charAt(i-1) == "9") { // apenas números...
		return ((nTecla > 47) && (nTecla < 58)); } 
	  else { // qualquer caracter...
		return true;
	  } 
	}
	else {
	  return true;
	}
  }

</script>


<form action="cadastrando cliente.php" method="post" name="cadastrocliente">

Nome
<input type="text" name="nome" onKeyPress="valida_digitos('nome')" onKeyUp="return Valida()" maxlength="50" size="50" /><br><br>

Telefone
<input type="text" name="telefone" onKeyDown="valida_digitos('telefone')" onKeyPress="return txtBoxFormat(this, '(99)9999-9999', event);" onKeyUp="return Valida()" maxlength="13" size="20" /><br><br>

Celular
<input type="text" name="celular" onKeyDown="valida_digitos('celular')" onKeyPress="return txtBoxFormat(this, '(99)9999-9999', event);" onKeyUp="return Valida()" maxlength="13" size="20" /><br><br>

CNPJ
<input type="text" name="cnpj" onKeyPress="MascaraCNPJ(cadastrocliente.cnpj);" onBlur="ValidarCNPJ(cadastrocliente.documento);" onKeyUp="return Valida()" maxlength="18" size="50" /><br><br>

CPF
<input type="text" name="documento" onKeyPress="MascaraCPF(cadastrocliente.documento);" onBlur="ValidarCPF(cadastrocliente.cpf);" onKeyUp="return Valida()" maxlength="14" size="50" /><br><br>

Email
<input type="text" name="email" onKeyUp="return Valida()" onBlur="ValidaEmail();" maxlength="30" size="50" /><br><br>

</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha essas máscaras com ER..

function mascara(o,f){
	v_obj=o
	v_fun=f
	setTimeout("execmascara()",1)
}
function execmascara(){
	v_obj.value=v_fun(v_obj.value)
}
function mcep(v){
	v=v.replace(/\D/g,"")					//Remove tudo o que não é dígito
	v=v.replace(/^(\d{5})(\d)/,"$1-$2") //Esse é tão fácil que não merece explicações
	return v
}
...

Não tem lógica!!! Não tem l-ó-g-i-c-a isso!!!

Cara, sinceramente, isso resolve qualquer problema de formatação de números!

Muito, mas muito obrigado mesmo!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi cara... não tem lógica oque? porquê ?

ER é uma ferramenta muito poderosa... e ótima nesses casos. É muito mais crossbrowser doque a maioria das alternativas que vi por ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi cara... não tem lógica oque? porquê ?

ER é uma ferramenta muito poderosa... e ótima nesses casos. É muito mais crossbrowser doque a maioria das alternativas que vi por ai.

No ambiente on-line fica um pouco difícil a real intenção do emprego de determinados termos, aliado ainda ao fato de certa diferença cultural entre as regiões do país.

O termo "não tem lógica", para nós Goianos, tange (nesse caso) o significado: "Estou surpreso!", "Nossa, que legal!", "Fantástico!", "Nunca tinha visto isso antes!", "Que ótimo recurso!"... ou talvez misturando um pouco do mineiro: "Uai, sô! Esse negócio é bão mess, né?! (que não se distancia muito do Goiano em muitos aspectos linguísticos, dos quais me orgulho plenamente).

 

Tenho visto (="tenho feito") aqui no fórum códigos enormes, apenas para validar máscaras de cep, telefone, cpf, dentre outros, com o uso de loops e expressões condicionais, linhas e linhas de código. Mas após ter compreendido a lógica das informações contidas no seu post, eu passei a repensar algumas situações em JavaScript.

 

Estamos em constante aprendizado. Embora JavaScript não seja a minha real "praia", utilizo-o como "hobbie" no meu dia-a-dia e seu post foi por deveras (="realmente") proveitoso para economizar meu tempo (que julgo precioso). A partir de agora, serei capaz de utilizar menos (muito, muito menos!) linhas de código nas validações de campos de formulário. Como você bem afirmou, ER é uma ferramenta muito poderosa e nisso eu nunca havia depositado tanto crédito assim. Todavia, a partir de agora é diferente!

 

Abraços e, novamente, obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

podem apagar esse tópico, pq esta dúvida se transformou em outra e está em um outro tópico chamado:

 

######_Javascript funciona no IE e não funciona no Firefox_######

 

por favor olhem este tópico novo!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.