Zend Framework 2: Criando View Helpers para formatação de CPF e CNPJ

Posted on maio 4, 2013. Filed under: PHP, Zend Framework | Tags:, , , |

Introdução

Neste artigo demonstro a criação de View Helpers para formatação de CPF e CNPJ no Zend Framework 2. Segue abaixo os códigos prontos para uso. Tenha um bom proveito.

View Helper para formatar CPF

Segue abaixo o View Helper para formatação de CPF:

<?php
// module/Application/src/Application/View/Helper/FormataCPF.php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;

class FormataCPF extends AbstractHelper
{
	public function __invoke($cpf)
	{
		// limpar tudo que não for digito
		$cpf = preg_replace('/[^0-9]/', '', trim($cpf));
		if(strlen($cpf) != 11) {
			// quantidade de numeros inválidos para cpf
			return null;
		}
		
		// formatar cpf
		$cpf_formatado = substr($cpf, 0, 3) . '.';
		$cpf_formatado .= substr($cpf, 3, 3) . '.';
		$cpf_formatado .= substr($cpf, 6, 3) . '-';
		$cpf_formatado .= substr($cpf, 9, 3);
		return $cpf_formatado;
	}
}

View Helper para Formatar CNPJ

Segue abaixo o View Helper para formatação de CNPJ:

// module/Application/src/Application/View/Helper/FormataCNPJ.php
<?php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;

class FormataCNPJ extends AbstractHelper
{
	public function __invoke($cnpj)
	{
		$cnpj = preg_replace('/[^0-9]/', '', trim($cnpj));
		if(strlen($cnpj) != 14) {
			// quantidade de numeros inválidos para cnpj
			return null;
		}
		
		$cnpj_formatado = substr($cnpj, 0, 2) . '.';
		$cnpj_formatado .= substr($cnpj, 2, 3) . '.';
		$cnpj_formatado .= substr($cnpj, 5, 3) . '/';
		$cnpj_formatado .= substr($cnpj, 8, 4) . '-';
		$cnpj_formatado .= substr($cnpj, 12, 2);
		return $cnpj_formatado;
	}
}

View Helper para formatar CPF e CNPJ juntos

Segue o View Helper abaixo para caso você queira utilizar apenas um View Helper para formatar tanto CPF quanto CNPJ. O código diferencia o CPF do CNPJ pela quantidade de dígitos: 11 dígitos é CPF. 14 dígitos é CNPJ:

<?php
// module/Application/src/Application/View/Helper/FormataCPFouCNPJ.php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;

class FormataCPFouCNPJ extends AbstractHelper
{
	public function __invoke($numero)
	{
		// limpar tudo que não for digito 
		$numero = preg_replace('/[^0-9]/', '', trim($numero));
		if(strlen($numero) == 11) {
			// formata cpf
			$cpf_formatado = substr($numero, 0, 3) . '.';
			$cpf_formatado .= substr($numero, 3, 3) . '.';
			$cpf_formatado .= substr($numero, 6, 3) . '-';
			$cpf_formatado .= substr($numero, 9, 3);
			return $cpf_formatado;
						
		} else if(strlen($numero) == 14) {
			// formata cnpj
			$cnpj_formatado = substr($numero, 0, 2) . '.';
			$cnpj_formatado .= substr($numero, 2, 3) . '.';
			$cnpj_formatado .= substr($numero, 5, 3) . '/';
			$cnpj_formatado .= substr($numero, 8, 4) . '-';
			$cnpj_formatado .= substr($numero, 12, 2);
			return $cnpj_formatado;
		} else {
			// quantidade de numeros inválidos para cpf ou cnpj
			return null;
		}
	}
}

Configurando o Module.php

Não esqueça de instanciar os View Helpers criados no arquivo Module.php:

// module/Application/Module.php
public function getViewHelperConfig()
{
	return array(	
			'invokables' => array (
					'formataCPF' => new View\Helper\FormataCPF(),
					'formataCNPJ' => new View\Helper\FormataCNPJ(),
					'formataCPFouCNPJ' => new View\Helper\FormataCPFouCNPJ(),
			),
	);
}

Usando os View Helpers na camada de View

<ul>
	<!--  usando formataCPF  -->
	<li>CPF: <?php echo $this->formataCPF('99999999999'); // formatando CPF?></li>

	<!--  usando formataCNPJ  -->
	<li>CNPJ: <?php echo $this->formataCNPJ('99999999999999'); // formatando CNPJ ?></li>

	<!--  usando formataCPFouCNPJ  -->
	<li>CPF: <?php echo $this->formataCPFouCNPJ('99999999999'); // formatando CPF?></li>
	<li>CNPJ: <?php echo $this->formataCPFouCNPJ('99999999999999'); // formatando CNPJ ?></li>	
	
</ul>

PS: Observe que você pode passar o número CPF/CNPJ já formatado para as funções criadas acima. A função já faz o tratamento de remover todos caracteres que não forem dígitos antes de realizar a formatação devida.

Resultado:

ScreenShot110

Ler Post Completo | Make a Comment ( None so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: