Formatar CPF/CNPJ direto no Firebird via SP
O exemplo abaixo cria uma Stored Procedure no Firebird para retornar CPF ou CNPJ formatados com pontuação. Você passa como parâmetro somente os numeros do documento. Enjoy!
create or alter procedure FORMATA_CPFCNPJ (
INCPFCNPJ varchar(14))
returns (
RESULTADO varchar(18))
as
begin
/* Formata CPF ou CNPJ de somente números para números e pontuação
Nilcemar P. Ferreira - http://nilcemar.blogspot.com - nilcemar@gmail.com - 10/2011*/
if (char_length(:incpfcnpj)=11) then --CPF
begin
resultado = Substring( :inCPFCNPJ from 1 for 3 ) || '.' || Substring( :inCPFCNPJ from 4 for 3 ) || '.' ||
Substring( :inCPFCNPJ from 7 for 3 ) || '-' || Substring( inCPFCNPJ from 10 for 2 );
end
else
if (char_length(:incpfcnpj)=14) then --CNPJ 17.605.320/0001-78
begin
resultado = Substring( :inCPFCNPJ from 1 for 2 ) || '.' || Substring( :inCPFCNPJ from 3 for 3 ) || '.' ||
Substring( :inCPFCNPJ from 6 for 3 ) || '/' ||
Substring( :inCPFCNPJ from 9 for 4 ) || '-' || Substring( inCPFCNPJ from 13 for 2 );
end
suspend;
end^
SET TERM ; ^
COMMENT ON PARAMETER FORMATA_CPFCNPJ.INCPFCNPJ IS
'Numero do CPF ou CNPJ sem pontuação';
Esta procedure é selecionável por causa da cláusula SUSPEND. Se quiser torná-la executável, elimine esta cláusula.
create or alter procedure FORMATA_CPFCNPJ (
INCPFCNPJ varchar(14))
returns (
RESULTADO varchar(18))
as
begin
/* Formata CPF ou CNPJ de somente números para números e pontuação
Nilcemar P. Ferreira - http://nilcemar.blogspot.com - nilcemar@gmail.com - 10/2011*/
if (char_length(:incpfcnpj)=11) then --CPF
begin
resultado = Substring( :inCPFCNPJ from 1 for 3 ) || '.' || Substring( :inCPFCNPJ from 4 for 3 ) || '.' ||
Substring( :inCPFCNPJ from 7 for 3 ) || '-' || Substring( inCPFCNPJ from 10 for 2 );
end
else
if (char_length(:incpfcnpj)=14) then --CNPJ 17.605.320/0001-78
begin
resultado = Substring( :inCPFCNPJ from 1 for 2 ) || '.' || Substring( :inCPFCNPJ from 3 for 3 ) || '.' ||
Substring( :inCPFCNPJ from 6 for 3 ) || '/' ||
Substring( :inCPFCNPJ from 9 for 4 ) || '-' || Substring( inCPFCNPJ from 13 for 2 );
end
suspend;
end^
SET TERM ; ^
COMMENT ON PARAMETER FORMATA_CPFCNPJ.INCPFCNPJ IS
'Numero do CPF ou CNPJ sem pontuação';
Esta procedure é selecionável por causa da cláusula SUSPEND. Se quiser torná-la executável, elimine esta cláusula.
Como usar esta procedure. Pretendo só guardar o numero do documento sem formatação e exibir para o usuário já formatado.
ResponderExcluirNesse caso, você pode colocar na propriedade "DisplayFormat" no seu código (no caso Delphi) ou fazer uma função que é chamada no onExit que verifica e muda o displayformat de acordo com o tamanho do campo.
ResponderExcluirEu uso no exemplo abaixo a função somentenumerosnastring, postada no blog
Ex:
procedure MudaFormatoCPFCNPJ(Campo: TField);
begin
if Length(Trim(SomenteNumerosNaString(Campo.AsString)))=11 then //cpf
Campo.DisplayFormat:= '000.000.000-00'
else
if Length(Trim(SomenteNumerosNaString(Campo.AsString)))=14 then //cnpj
Campo.DisplayFormat:= '00.000.000/0000-00';
end;
//No evento onExit do campo, chame a procedure
MudaFormatoCPFCNPJ(Tabela.FieldByName('nomedocampo'));
Pronto.