Pular para o conteúdo
officetuning.aiofficetuning.ai
TreinamentosConsultoriaBibliotecaFerramentasConteúdoPortfólio
Entrar
officetuning.aiofficetuning.ai

Treinamento, consultoria e mentoria para decidir, construir e aprender nas quatro frentes da marca.

AI · Data · Productivity · Dev · São Paulo
contato@officetuning.ai
TreinamentosPower BIExcelSQLPowerPointIA + ProdutividadeTodos os treinamentos
PortalConsultoriaBibliotecaPortfólioBackground BuilderDashboard CanvasConteúdo
InstitucionalPolítica de privacidadeInformações legais
© 2026 officetuning.ai · São Paulo
  1. Biblioteca
  2. Power Query (M)
  3. UDFs M
  4. fnValidaCNPJ

fnValidaCNPJ

MValidação

Valida um CNPJ numérico ou alfanumérico pelos dois dígitos verificadores.

Sintaxe

M
fnValidaCNPJ(CNPJ as any) as nullable logical

Parâmetros

CNPJanyObrigatório

CNPJ formatado, sem formatação ou numérico. Letras minúsculas viram maiúsculas.

M
"12.ABC.345/01DE-35"

Tipo de retorno

nullable logical

Exemplos

M
fnValidaCNPJ("12.345.678/0001-95")
// true

fnValidaCNPJ("12.ABC.345/01DE-35")
// true  (alfanumérico — exemplo da Receita Federal)

fnValidaCNPJ("12.345.678/0001-00")
// false

Código completo

M
let
    fnValidaCNPJ = (CNPJ as any) as nullable logical =>
        let
            vTexto =
                if CNPJ = null then null
                else if CNPJ is number then Text.PadStart(Text.From(Number.Abs(CNPJ), "en-US"), 14, "0")
                else if CNPJ is text then Text.Upper(CNPJ)
                else Text.Upper(Text.From(CNPJ)),
            vLimpo = Text.Select(vTexto ?? "", {"0".."9", "A".."Z"}),
            // Valor de cada caractere: código ASCII - 48
            vValores = List.Transform(Text.ToList(vLimpo), each Character.ToNumber(_) - 48),
            fnDigito = (base as list) as number =>
                let
                    // 12 posições: 5,4,3,2,9..2 | 13 posições: 6,5,4,3,2,9..2
                    vPesos = List.LastN({6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}, List.Count(base)),
                    vResto = Number.Mod(List.Sum(List.Transform(List.Positions(base), (i) => base{i} * vPesos{i})), 11)
                in
                    if vResto < 2 then 0 else 11 - vResto,
            vBase = List.FirstN(vValores, 12),
            vDV1 = fnDigito(vBase),
            vDV2 = fnDigito(vBase & {vDV1})
        in
            if vTexto = null then null
            else Text.Length(vLimpo) = 14
                and Text.Select(Text.End(vLimpo, 2), {"0".."9"}) = Text.End(vLimpo, 2)
                and List.Count(List.Distinct(vValores)) > 1
                and vDV1 = vValores{12}
                and vDV2 = vValores{13},

    Documentacao = [
        Documentation.Name = "fnValidaCNPJ",
        Documentation.Description = "Valida um CNPJ numérico ou alfanumérico pelos dígitos verificadores.",
        Documentation.LongDescription = "Aceita CNPJ formatado, sem formatação ou numérico. Letras minúsculas são convertidas para maiúsculas. Rejeita sequências repetidas. Entrada null retorna null.",
        Documentation.Category = "Validação",
        Documentation.Author = "Paulo André Jesus",
        Documentation.Version = "2.0",
        Documentation.Examples = {
            [Description = "CNPJ numérico", Code = "fnValidaCNPJ(""12.345.678/0001-95"")", Result = "true"],
            [Description = "CNPJ alfanumérico (exemplo da Receita Federal)", Code = "fnValidaCNPJ(""12.ABC.345/01DE-35"")", Result = "true"],
            [Description = "Dígito errado", Code = "fnValidaCNPJ(""12.345.678/0001-00"")", Result = "false"]
        }
    ]
in
    Value.ReplaceType(fnValidaCNPJ, Value.ReplaceMetadata(Value.Type(fnValidaCNPJ), Documentacao))

Observações

CNPJ alfanumérico: emitido desde julho de 2026. As 12 primeiras posições aceitam A–Z; os dois dígitos verificadores continuam numéricos. Cada caractere vale o código ASCII menos 48 (A = 17, Z = 42), com os mesmos pesos e o mesmo módulo 11. Atenção Coluna de CNPJ do tipo Número inteiro não comporta o alfanumérico: mude para Texto na origem e no modelo.

Mais informações

Fonte
Paulo André Jesus — OfficeTuning · regra do DV: Receita Federal
Versão
2.0
Referência
https://www.gov.br/receitafederal/pt-br/acesso-a-informacao/acoes-e-programas/programas-e-atividades/cnpj-alfanumerico
AnteriorfnTelefoneAnonimoPróxima fnValidaCPF
Biblioteca