PHP

Máscaras para CPF, CNPJ e outros tipos de dados com PHP

23/05/2021PHP

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

Como funciona a lógica de validação do CPF

Outros conteudos que podem ser de seu interesse

Converter arquivo texto em JSON com PHP
08/10/2019PHP

Converter arquivo texto em JSON com PHP

Aprenda uma forma simples de converter um arquivo texto em JSON usando PHP

Saiba mais...
Localizando e substituindo dados com expressões regulares com PHP
14/06/2020PHP

Localizando e substituindo dados com expressões regulares com PHP

Veja alguns exemplos de como localizar ou atualizar dados com expressões regulares com PHP

Saiba mais...

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

MySQL - Referência Rápida

 

SQL Server - Referência Rápida

 

SQL vs Mongo