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, 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", "#####-###")";

 

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

 

Quer conferir mais dicas sobre PHP? Clique aqui e veja mais dicas!
BINS - Blog PHP

 

Conteúdo sobre banco de dados sem complicação!

MySQL - Referência Rápida

 

SQL Server - Referência Rápida

 

SQL vs Mongo

 

 

 

Veja outros conteúdos que podem ser de seu interesse