Algum tempo atrás precisava de uma função para um sistema de delivery, onde você passa como parâmetro o numero de telefone e a função verifica se é de celular ou fixo, se existe DDD ou não, verifica se existe o 9 digito e retorna o numero formatado.
Segue abaixo:
function Tformata_tel(cTexto: string): string;
// Variavel cDDDPadrao é um parametro do meu sistema.
// assim se o operador nao digitar o DDD para agilizar o pedido se nao tiver bina, ele completa com o DDDPadrao automaticamente
begin
if Length(Trim(ctexto)) = 0 then
begin
Result := '';
end
else if Length( SoNumero(cTexto) ) = 8 then // fixo
begin
if (strtoint(copy(SoNumero(cTexto),0,1)) >= 6) and (strtoint(copy(SoNumero(cTexto),0,1)) <= 9) then //é um celular
Result := '('+cDDDPadrao+')'+'9'+copy(SoNumero(cTexto),0,4)+'-'+copy(SoNumero(cTexto),5,4)
else
Result := '('+cDDDPadrao+')'+copy(SoNumero(cTexto),0,4)+'-'+copy(SoNumero(cTexto),5,4)
end
else if Length( SoNumero(cTexto) ) = 9 then //celular
Result := '('+cDDDPadrao+')'+copy(SoNumero(cTexto),0,5)+'-'+copy(SoNumero(cTexto),6,4)
else if Length( SoNumero(cTexto) ) = 10 then // fixo com ddd
begin
if (StrtoInt(copy(SoNumero(cTexto),3,1)) >= 6) and (StrtoInt(copy(SoNumero(cTexto),3,1)) <= 9) then //celular
Result := '('+copy(SoNumero(cTexto),0,2)+')'+'9'+copy(SoNumero(cTexto),3,4)+'-'+copy(SoNumero(cTexto),7,4)
else
Result := '('+copy(SoNumero(cTexto),0,2)+')'+copy(SoNumero(cTexto),3,4)+'-'+copy(SoNumero(cTexto),7,4)
end
else if Length( SoNumero(cTexto) ) = 11 then //celular com ddd
Result := '('+copy(SoNumero(cTexto),0,2)+')'+copy(SoNumero(cTexto),3,5)+'-'+copy(SoNumero(cTexto),8,4)
end;
Observe que dentro dela, existe a chamada de outra função onde verifico retorna apenas os números da string “SoNumero”:
function SoNumero(fField: String): String;
var
I : Byte;
begin
Result := '';
for I := 1 To Length(fField) do
if fField [I] In ['0'..'9'] Then
Result := Result + fField [I];
end;
Fonte: https://www.teleco.com.br/num.asp