Máscaras para CPF, CNPJ e outros tipos de dados com PHP
Neste artigo vamos ver como criar máscaras para exibir dados seguindo um certo padrão utilizando o PHP
Geralmente a aplicação de máscaras para dados ocorre do lado do frontend, isso costuma ser feito com JavaScript. Porem, existem casos onde temos os dados sem máscara guardados num banco de dados, e se faz necessário exibir com máscara. Desta forma, vamos utilizar o PHP para fazer a padronização destes dados.
Criar máscaras é algo bem simples de fazer. Vamos começar com o seguinte exemplo.
$CNPJ = "89215003000156";
$formato = "##.###.###/####-##";
Este número de CNPJ foi gerado de forma aleatória utilizando a ferramenta "Gerador de CNPJ", que você pode conferir neste link
https://www.4devs.com.br/gerador_de_cnpj
Na variável $formato, informamos o padrão no qual este número deve ser formatado.
Para aplicar a máscara de CNPJ, podemos tratar tanto as variáveis $CNPJ e $formato como se fossem arrays. Para iterar por cada caractere do formato, podemos fazer da seguinte forma:
$CNPJ = "89215003000156";
$formato = "##.###.###/####-##";
for($i = 0; $i<=strlen($formato)-1; $i++) {
echo $formato[$i] . "
";
}
O resultado foi a exibição de cada caractere da máscara, um abaixo do outro.
Quando utilizamos um "FOR", precisamos informar o valor inicial, o valor final é o incremento a ser aplicado em cada interação. Perceba que usamos no segundo parâmetro a função strlen($formato)-1, esta função retorna o tamanho de uma string. Como um array começa na posição zero, foi necessário subtrair o resultado em menos 1.
A logica é a seguinte, precisamos substituir cada caractere "#" por um número informado. Será necessário criar uma variável auxiliar para guardar o resultado com a máscara. Nosso código ficaria da seguinte forma:
$CNPJ = "89215003000156";
$formato = "##.###.###/####-##";
$resultado = '';
$posicao_valor = 0;
for($i = 0; $i<=strlen($formato)-1; $i++) {
//Aplicando a máscara
if($formato[$i] == '#') {
if(isset($CNPJ[$posicao_valor])) {
$resultado .= $CNPJ[$posicao_valor++];
}
} else {
$resultado .= $formato[$i];
}
}
echo $resultado;
Ao iterar o array contendo o formato, verificamos se o caracter é o "#". Se este for o caractere atual, adicionamos na variavel "resultado" a posição atual do array "CNPJ", que vai ser um dos números informados. Caso contrário, copiamos o caractere do formato, que deve ser um dos separados que informamos.
Algo que deve chamar a sua atenção é o seguinte trecho de código:
if(isset($CNPJ[$posicao_valor])) {
$resultado .= $CNPJ[$posicao_valor++];
}
O isset é utilizado para verificar se existe uma certa váriavel. Perceba que o tamanho do $CNPJ e do $formato são diferentes. No caso de uma máscara para o CNPJ, a máscara para o CNPJ deve ter 18 caracteres. Mas, um número de CNPJ sem máscara vai ter 14 caracteres.
Na hora de contatenar, fizemos da seguinte forma:
$resultado .= $CNPJ[$posicao_valor++];
Isso permite adicionar a posição atual no resultado e ao mesmo tempo, imcrementar esta variável, já que a posiçao do array $CNPJ apenas deve mudar se o caractere do array formato for igual a "#".
Agora que vimos como criar a máscara, vamos criar uma função que nos permita reaproveitar esta programação para outros tipos de dados, e vamos fazer testes com outros formatos.
function mascara($valor, $formato) {
$retorno = '';
$posicao_valor = 0;
for($i = 0; $i<=strlen($formato)-1; $i++) {
if($formato[$i] == '#') {
if(isset($valor[$posicao_valor])) {
$retorno .= $valor[$posicao_valor++];
}
} else {
$retorno .= $formato[$i];
}
}
return $retorno;
}
echo mascara("89215003000156", "##.###.###/####-##");
echo mascara("56744792083", "###.###.###-##")";
echo mascara("1123456789", "(##)####-####")";
echo mascara("04104020", "#####-###")";
O primeiro exemplo foi uma máscas de CNPJ. Já o exemplo abaixo foi uma máscara de CPF
echo mascara("56744792083", "###.###.###-##")";
E os dois úlitmos exemlos foram máscaras de telefone e de CEP
Como eu comentei no começo deste artigo, geralmente as máscaras são aplicadas ao capturar dados pelo frontend. Para fazer isso com JavaScript, eu recomento a leitura do seguinte artigo.
Mascaras para campos de formularios com Javascript
Caso você trabalhe com bancos de dados SQL e queira aprender como aplicar máscaras direto no banco de dados, então o seguinte artigo é para você!
Máscaras para CPF, CNPJ e outros tipos de dados com SQL
Se você quer saber como funciona a lógica para validação de CPF e CNPJ, consulte os links a seguir:
Como funciona a lógica de validação do CNPJ