M · UDF
fnTelefoneAnonimo
Mascara telefone fixo ou celular brasileiro, mantendo o DDD, os dois primeiros e os dois últimos dígitos. Aceita código do país (55), prefixo de discagem (0) e código de operadora.
Categoria: Máscara de dadosTipo: UDFVersão: v2.1Fonte: Paulo André Jesus — OfficeTuningAtualizado em: 27/09/2026
Documentação completa na Function Library →Sintaxe
fnTelefoneAnonimo(telefone as nullable text) as nullable textArgumentos
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| telefone | nullable text | Sim | Telefone em qualquer formatação; aceita código do país 55, prefixo 0 e código de operadora. |
Retorno
nullable text
Código completo
let
fnTelefoneAnonimo = (telefone as nullable text) as nullable text =>
let
vDigitos = Text.Select(telefone ?? "", {"0".."9"}),
vTam = Text.Length(vDigitos),
// Código do país: 55 + 10 dígitos (fixo) ou 55 + 11 (celular)
vSemPais =
if List.Contains({12, 13}, vTam) and Text.StartsWith(vDigitos, "55")
then Text.End(vDigitos, vTam - 2)
else vDigitos,
vTamSemPais = Text.Length(vSemPais),
// DDD nunca começa com 0: um 0 inicial é prefixo de discagem.
// 0 + DDD + número = 11 ou 12 dígitos; 0 + operadora (2) + DDD + número = 13 ou 14
vNacional =
if Text.StartsWith(vSemPais, "0") and List.Contains({11, 12}, vTamSemPais)
then Text.End(vSemPais, vTamSemPais - 1)
else if Text.StartsWith(vSemPais, "0") and List.Contains({13, 14}, vTamSemPais)
then Text.End(vSemPais, vTamSemPais - 3)
else vSemPais,
vDDD = Text.Start(vNacional, 2),
vInicio = Text.Middle(vNacional, 2, 2),
vFim = Text.End(vNacional, 2)
in
if Text.StartsWith(vNacional, "0") then null // DDD inválido
else if Text.Length(vNacional) = 10 then "(" & vDDD & ") " & vInicio & "**-**" & vFim
else if Text.Length(vNacional) = 11 then "(" & vDDD & ") " & vInicio & "***-**" & vFim
else null,
fnTelefoneAnonimoTipo = type function (
telefone as (type nullable text meta [
Documentation.FieldCaption = "Telefone",
Documentation.FieldDescription = "Telefone em qualquer formatação. Aceita +55, prefixo 0 e código de operadora; outros tamanhos retornam null."
])
) as nullable text meta [
Documentation.Name = "fnTelefoneAnonimo",
Documentation.Description = "Mascara telefone fixo ou celular, mantendo DDD, dois dígitos iniciais e dois finais.",
Documentation.LongDescription = "Considera só os dígitos da entrada. Descarta o código do país 55, o prefixo de discagem 0 e o código de operadora (0 + 2 dígitos). Depois disso, 10 dígitos = fixo e 11 = celular; outros tamanhos, ou DDD começando com 0, retornam null.",
Documentation.Category = "Máscara de dados",
Documentation.Author = "Paulo André Jesus",
Documentation.Version = "2.1",
Documentation.Examples = {
[Description = "Fixo", Code = "fnTelefoneAnonimo(""(11) 3221-1234"")", Result = """(11) 32**-**34"""],
[Description = "Celular com país", Code = "fnTelefoneAnonimo(""+55 21 98765-4321"")", Result = """(21) 98***-**21"""],
[Description = "Prefixo 0", Code = "fnTelefoneAnonimo(""(021) 3221-1234"")", Result = """(21) 32**-**34"""],
[Description = "Código de operadora", Code = "fnTelefoneAnonimo(""0 15 11 98765-4321"")", Result = """(11) 98***-**21"""],
[Description = "Inválido", Code = "fnTelefoneAnonimo(""123456"")", Result = "null"]
}
]
in
Value.ReplaceType(fnTelefoneAnonimo, fnTelefoneAnonimoTipo)Exemplos
fnTelefoneAnonimo("(11) 3221-1234")
// "(11) 32**-**34"
fnTelefoneAnonimo("+55 21 98765-4321")
// "(21) 98***-**21"
fnTelefoneAnonimo("(021) 3221-1234")
// "(21) 32**-**34" (prefixo 0 descartado)
fnTelefoneAnonimo("0 15 11 98765-4321")
// "(11) 98***-**21" (prefixo e operadora descartados)
fnTelefoneAnonimo("123456")
// nullDicas e observações
⚠️ Até a versão 2.0, o prefixo 0 não era removido: "(021) 3221-1234" tinha 11 dígitos, virava "celular" e saía "(02) 13***-**34"; com código de operadora, o resultado era null. 💡 DDD nunca começa com 0, então um 0 inicial é sempre prefixo de discagem. 💡 Depois das remoções, 10 dígitos = fixo; 11 = celular. Outros tamanhos retornam null. ⚠️ Mascarar não é anonimizar no sentido da LGPD: com parte dos dígitos à vista, o dado ainda pode identificar a pessoa.