terça-feira, 14 de fevereiro de 2012

Função para formatar CPF no MySQL

Salve salve papeiros.

O Cadastro de Pessoa Física, popular CPF, além de outros documentos pessoais são únicos para cada pessoa, e todos possuem um formato especifico.

Os documentos de identidade possuem uma formatação especifica para cada unidade federativa, não sendo possível especificar um formato padrão.

Mas o CPF é um documento Federal, logo, podemos estipular seu formato padrão, vamos a ele:

###.###.###-##

Este é o formato utilizado, mas lhe pergunto, este é o valor que você esta armazenado no seu banco de dados?

Creio que não, mas para apresentar o cpf no formato mas amigável em nossos sistemas, precisamos do auxílio da função abaixo.

 DELIMITER $$  
 CREATE FUNCTION `fun_formata_cpf`(p_cpf varchar(20)) RETURNS varchar(14) CHARSET utf8  
 BEGIN  
 declare l_ret varchar(14);  
 -- Retirando possiveis formatacoes no valor recebido.  
 set p_cpf = replace(p_cpf,'.','');  
 set p_cpf = replace(p_cpf,'-','');  
 set p_cpf = replace(p_cpf,' ','');  
 set p_cpf = trim(p_cpf);  
 -- Armazenando o valor recebido em uma variavel interna  
 set l_ret = p_cpf;  
 -- Montando a formatacao  
 set l_ret = concat(mid(l_ret,1,3),'.',mid(l_ret,4,3),'.',mid(l_ret,7,3),'-',mid(l_ret,10,2));  
 -- Retornando o resultado  
 return l_ret;  
 END  

Como de praste, vamos explicar.

1º - A função tem como parâmetro de entrada um valor alfanumerico, com 20 posições, aqui representado pelo p_cpf.

2º - Declaro a variável l_ret que apresentará o resultado final, ou seja, o cpf formatado.

3º - Retiro possíveis caracteres existêntes no parâmetro de entrada.

4º - Seto a variável l_ret para receber o valor já manipulado do parâmetro de entrada p_cpf.

5º - Seto a variável l_ret com ela mesma, realizando uma concatenação das posições.
No caso, uso o mid para separar os grupos, e concatena-los com os pontos e o traço, mas também podemos utilizar o substring, que tem o mesmo efeito do mid.

6º - Retorno a função o resultado final, o cpf formatado.

Com a função acima, você pode realizar uma derivação, prepando-a para formatar também CNPJ, que assim como o cpf, possui formato padrão.

Função criada através do MySQL Workbench 5.2.35 CE - Revisão 7915

Espero mais uma vez ter sido útil, um grande abraço e até a próxima.

_ _
Fabiano Abreu

Clique aqui e veja todas as matérias sobre MySQL

7 comentários:

  1. Olá Fabiano,

    gostaria de complementar o artigo acima indicando um outro código para validar o cpf a ser inserido na base, garantindo assim uma maior consistência dos dados armazenados.

    Segue o link para o artigo:
    http://vitorhansen.blogspot.com/2011/07/validar-cpf-mysql.html

    Abs

    ResponderExcluir
  2. Fabiano bom dia,

    Muito bom seu código. Gostaria de expressar aqui minha gratidão.

    ResponderExcluir
    Respostas
    1. Olá Sidymar,

      Muito obrigado por seu feedback.

      Grande abraço.

      Excluir
  3. para CNPJ ficou:


    BEGIN
    declare l_ret varchar(21);
    -- Retirando possiveis formatacoes no valor recebido.
    set p_cnpj = replace(p_cnpj,'.','');
    set p_cnpj = replace(p_cnpj,'-','');
    set p_cnpj = replace(p_cnpj,' ','');
    set p_cnpj = trim(p_cnpj);
    set p_cnpj = replace(p_cnpj,'/','');
    -- Armazenando o valor recebido em uma variavel interna
    set l_ret = p_cnpj;
    -- Montando a formatacao
    set l_ret = concat( mid(l_ret,1,2),'.',mid(l_ret,3,3),'.',mid(l_ret,6,3),'/',mid(l_ret,9,4),'-',mid(l_ret,13,2) );
    -- Retornando o resultado
    return l_ret;
    END

    ResponderExcluir
    Respostas
    1. Olá Blog Programação,

      Isso ai, muito obrigado pela contribuição.

      Grande abraço.

      Excluir
  4. Muito bom. Obrigado por compartilhar!

    ResponderExcluir
    Respostas
    1. Olá Caio,

      Eu que agradeço o feedback.

      Grande abraço.

      Excluir