VEM AÍ: CNPJ VAI MUDAR DE FORMATO
É isso. Formato de CNPJ vai mudar para alfa-numérico no ano que vem. Pra muita gente isso é uma mudança monstruosa, por isso sugiro já se agilizar pra não ser pego com as calças na mão.
Alterado em 03/07/2025 06:32:26
public static class CNPJHelper
{
public static bool IsCnpjValido(string cnpj)
{
if (string.IsNullOrWhiteSpace(cnpj))
return false;
cnpj = cnpj.Trim().Replace(".", "").Replace("-", "").Replace("/", "");
// Verifica se é só numérico e 14 dígitos ? formato antigo
if (Regex.IsMatch(cnpj, @"^\d{14}$"))
{
return ValidarCnpjAntigo(cnpj);
}
// Novo formato alfanumérico — Exemplo: BR12-AB34-56CD
if (Regex.IsMatch(cnpj, @"^[A-Za-z0-9\-]{8,24}$"))
{
return true; // Aqui você pode futuramente aplicar a regra oficial
}
return false;
}
private static bool ValidarCnpjAntigo(string cnpj)
{
int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
string tempCnpj, digito;
int soma, resto;
tempCnpj = cnpj.Substring(0, 12);
soma = 0;
for (int i = 0; i < 12; i++)
soma += int.Parse(tempCnpj[i].ToString()) * multiplicador1[i];
resto = (soma % 11);
if (resto < 2)
resto = 0;
else
resto = 11 - resto;
digito = resto.ToString();
tempCnpj += digito;
soma = 0;
for (int i = 0; i < 13; i++)
soma += int.Parse(tempCnpj[i].ToString()) * multiplicador2[i];
resto = (soma % 11);
if (resto < 2)
resto = 0;
else
resto = 11 - resto;
digito += resto.ToString();
return cnpj.EndsWith(digito);
}
}
Exemplo de uso:
string cnpj1 = "12345678000195"; // antigo
string cnpj2 = "BR12-AB34-56CD"; // novo (exemplo fictício)
Console.WriteLine(CNPJHelper.IsCnpjValido(cnpj1)); // true ou false
Console.WriteLine(CNPJHelper.IsCnpjValido(cnpj2)); // true (válido sintaticamente)
{
public static bool IsCnpjValido(string cnpj)
{
if (string.IsNullOrWhiteSpace(cnpj))
return false;
cnpj = cnpj.Trim().Replace(".", "").Replace("-", "").Replace("/", "");
// Verifica se é só numérico e 14 dígitos ? formato antigo
if (Regex.IsMatch(cnpj, @"^\d{14}$"))
{
return ValidarCnpjAntigo(cnpj);
}
// Novo formato alfanumérico — Exemplo: BR12-AB34-56CD
if (Regex.IsMatch(cnpj, @"^[A-Za-z0-9\-]{8,24}$"))
{
return true; // Aqui você pode futuramente aplicar a regra oficial
}
return false;
}
private static bool ValidarCnpjAntigo(string cnpj)
{
int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
string tempCnpj, digito;
int soma, resto;
tempCnpj = cnpj.Substring(0, 12);
soma = 0;
for (int i = 0; i < 12; i++)
soma += int.Parse(tempCnpj[i].ToString()) * multiplicador1[i];
resto = (soma % 11);
if (resto < 2)
resto = 0;
else
resto = 11 - resto;
digito = resto.ToString();
tempCnpj += digito;
soma = 0;
for (int i = 0; i < 13; i++)
soma += int.Parse(tempCnpj[i].ToString()) * multiplicador2[i];
resto = (soma % 11);
if (resto < 2)
resto = 0;
else
resto = 11 - resto;
digito += resto.ToString();
return cnpj.EndsWith(digito);
}
}
Exemplo de uso:
string cnpj1 = "12345678000195"; // antigo
string cnpj2 = "BR12-AB34-56CD"; // novo (exemplo fictício)
Console.WriteLine(CNPJHelper.IsCnpjValido(cnpj1)); // true ou false
Console.WriteLine(CNPJHelper.IsCnpjValido(cnpj2)); // true (válido sintaticamente)
Alterado em 03/07/2025 06:34:19
Exemplo: CNPJ antigo ou novo (C#)
using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void txtCNPJ_TextChanged(object sender, EventArgs e)
{
string cnpj = txtCNPJ.Text.Trim();
if (string.IsNullOrWhiteSpace(cnpj))
{
lblTipo.Text = "CNPJ inválido";
return;
}
// Remove espaços e símbolos opcionais
cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");
if (Regex.IsMatch(cnpj, @"^\d{14}$"))
{
lblTipo.Text = "CNPJ Antigo (Numérico)";
}
else if (Regex.IsMatch(cnpj, @"^[A-Za-z0-9\-]{8,24}$"))
{
lblTipo.Text = "CNPJ Novo (Alfanumérico)";
}
else
{
lblTipo.Text = "Formato inválido";
}
}
}
using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void txtCNPJ_TextChanged(object sender, EventArgs e)
{
string cnpj = txtCNPJ.Text.Trim();
if (string.IsNullOrWhiteSpace(cnpj))
{
lblTipo.Text = "CNPJ inválido";
return;
}
// Remove espaços e símbolos opcionais
cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");
if (Regex.IsMatch(cnpj, @"^\d{14}$"))
{
lblTipo.Text = "CNPJ Antigo (Numérico)";
}
else if (Regex.IsMatch(cnpj, @"^[A-Za-z0-9\-]{8,24}$"))
{
lblTipo.Text = "CNPJ Novo (Alfanumérico)";
}
else
{
lblTipo.Text = "Formato inválido";
}
}
}
Alterado em 03/07/2025 12:04:29
Que saco, já não basta as mudanças na NFe, o que tem de coisa vincula ao CNPJ no nosso sistema é uma festa.
Não afeta os existe tentes, mas toda nossa estrutura de tabelas e validações.
Não afeta os existe tentes, mas toda nossa estrutura de tabelas e validações.
Não só isso NILSONTRES, não li à fundo ainda. Não creio que os CNPJ's atuais vão mudar(acho que não), mas o novos, vão conter letras, o que muda até mesmo chave pix e todas as bases de dados.
Aqui o link de QA para o novo formato.
Segundo o documento o CNPJ 12.ABC.345/01DE-35 é válido. Imagina a confusão que isso vai dar pra fazer pix para quem usar esse CNPJ como chave...
Aqui o link de QA para o novo formato.
Segundo o documento o CNPJ 12.ABC.345/01DE-35 é válido. Imagina a confusão que isso vai dar pra fazer pix para quem usar esse CNPJ como chave...
Faça seu login para responder