Ir para conteúdo

POWERED BY:

Arquivado

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

Emanuel Wédson

[Resolvido] Exibir campos CPF e CNPJ corretamente

Recommended Posts

Olá pessoal,

 

Tenho um formulário de cadastro de distribuidor que contem os campos CPF e CNPJ.

O Formulário é simples e sem validação, contando apenas com o limitador de caracteres que enviar todos os dados para um banco mySQL.

 

Tenho uma página exibir que me mostra perfeitamente todos os dados contidos na tabela do banco mySQL, porém, gostaria de exibir na tela

os campos CPF e CNPJ com ponto, traço e barra.

 

Atualmente exibi assim:

 

CPF: 99999999999

CNPJ 99999999999999

 

Gostaria de exibir assim:

 

CPF: 999.999.999-38

CNPJ: 99.999.999/9999-99

 

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha no php não sei como fazer, porem você pode postar lá no javascrit que dá pra fazer.

 

veja em exemplo para cadastrar (inserir) com cnpj:

 

<html>
	<head>
		<title>formatando Cnpj em javascript</title>
		<script type="text/javascript">
			function FormataCnpj(campo, teclapres)
			{
				var tecla = teclapres.keyCode;
				var vr = new String(campo.value);
				vr = vr.replace(".", "");
				vr = vr.replace("/", "");
				vr = vr.replace("-", "");
				tam = vr.length + 1;
				if (tecla != 14)
				{
					if (tam == 3)
						campo.value = vr.substr(0, 2) + '.';
					if (tam == 6)
						campo.value = vr.substr(0, 2) + '.' + vr.substr(2, 5) + '.';
					if (tam == 10)
						campo.value = vr.substr(0, 2) + '.' + vr.substr(2, 3) + '.' + vr.substr(6, 3) + '/';
					if (tam == 15)
						campo.value = vr.substr(0, 2) + '.' + vr.substr(2, 3) + '.' + vr.substr(6, 3) + '/' + vr.substr(9, 4) + '-' + vr.substr(13, 2);
				}
			}
		</script>
	</head>
	<body>
		<form method="post" action="arquivo.php">
			<p>
				<label>Cnpj:</data>
				<input type="text" name="data" maxlength="18" onkeyup="FormataCnpj(this,event)" />
			</p>
		</form>
	</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Emanuel Wédson,

 

Os dados já estão em uma tabela e você quer apenas formatá-los ou você quer que a entrada do usuário já seja formatada no navegador ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Emanuel Wédson,

 

Os dados já estão em uma tabela e você quer apenas formatá-los ou você quer que a entrada do usuário já seja formatada no navegador ?

 

Os dados ja estão na tabela e quero apenas formatá-los. O usuário ao se cadastrar não precisaria digitar os pontos entende? Só preciso

exibir corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só preciso exibir corretamente.

 

Ok, então é bem simples:

 

<?php
$cpf = '99999999999';
$cpf = vsprintf( '%d.%d.%d-%d' , sscanf( $cpf , '%3d%3d%3d%2d' ) ); //formatando o CPF

$cnpj = '99999999999999';
$cnpj = vsprintf( '%d.%d.%d/%d-%d' , sscanf( $cnpj , '%2d%3d%3d%4d%2d' ) ); //formatando o CNPJ

var_dump( $cpf , $cnpj );

 

A saída:

string(14) "999.999.999-99"
string(18) "99.999.999/9999-99"

Links:

vsprintf()

sprintf() http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Nesse link você encontrará a referência para o formato

sscanf()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, então é bem simples:

 

<?php
$cpf = '99999999999';
$cpf = vsprintf( '%d.%d.%d-%d' , sscanf( $cpf , '%3d%3d%3d%2d' ) ); //formatando o CPF

$cnpj = '99999999999999';
$cnpj = vsprintf( '%d.%d.%d/%d-%d' , sscanf( $cnpj , '%2d%3d%3d%4d%2d' ) ); //formatando o CNPJ

var_dump( $cpf , $cnpj );

 

...

 

é mais rápido que preg_replace?

quais as vantagens?

 

echo preg_replace('/(\d{3})(\d{3})(\d{3})(\d{2})/','$1.$2.$3-$4',$cpf);

e

 

echo preg_replace('/(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/','$1.$2.$3/$4-$5',$cnpj);

também funcionam, não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é mais rápido que preg_replace?

quais as vantagens?

 

Expressão regular é mais lenta no processamento, veja:

 

<?php
$cpf = '99999999999';

for ( $i = 0 , $t1 = microtime( true ); $i < 1000 ; ++$i ){
$cpf_f = vsprintf( '%d.%d.%d-%d' , sscanf( $cpf , '%3d%3d%3d%2d' ) );
}

var_dump( microtime( true ) - $t1 );

sleep( 3 );

for ( $i = 0 , $t2 = microtime( true ) ; $i < 1000 ; ++$i ){
$cpf_f = preg_replace('/(\d{3})(\d{3})(\d{3})(\d{2})/','$1.$2.$3-$4',$cpf);
}

var_dump( microtime( true ) - $t2 );

 

Saída:

float(0.0090701580047607)
float(0.013031005859375)

Como pode ver, apesar de a expressão regular funcionar, a primeira implementação é muito mais rápida.

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.