Classe de controle de CNPJ (Inclusive validação)
Esta classe contém a validação do dígito verificador e a montagem certa da string de um CNPJ válido.
Para a validação não é necessário passar a string formatada, o código providenciará a limpeza antes da validação.
public class CNPJ
{
private string _cnpj;
public CNPJ(string cnpj)
{
_cnpj = cnpj;
}
private static string GeraDigito(string cnpj)
{
int pPeso = 2;
int pSoma = 0;
for (int i = cnpj.Length - 1; i >= 0; i--)
{
pSoma += pPeso * Convert.ToInt32(cnpj[i].ToString());
pPeso++;
if (pPeso == 10)
pPeso = 2;
}
int pNumero = (11 - (pSoma % 11));
if (pNumero > 9)
pNumero = 0;
return pNumero.ToString();
}
public static bool Validar(string cnpj)
{
// Se for vazio
if (String.IsNullOrEmpty(cnpj.Trim()))
return false;
// Retirar todos os caracteres que não sejam numéricos
string aux = string.Empty;
for (int i = 0; i < cnpj.Length; i++)
{
if (char.IsNumber(cnpj[i]))
aux += cnpj[i].ToString();
}
// O tamanho do CNPJ tem que ser 14
if (aux.Length != 14)
return false;
// Guardo os dígitos para compará-lo no final
string pDigito = aux.Substring(12, 2);
aux = aux.Substring(0, 12);
//Calculo do 1º digito
aux += GeraDigito(aux);
//Calculo do 2º digito
aux += GeraDigito(aux);
//Comparo os dígitos calculadoscom os guardados anteriormente
return pDigito == aux.Substring(12, 2);
}
public static string MontarMascara(string cnpj)
{
string aux = "";
// Retirar todos os caracteres que não sejam numéricos
for (int i = 0; i < cnpj.Length; i++)
{
if (char.IsNumber(cnpj[i]))
aux += cnpj[i].ToString();
}
if (aux.Length != 14)
return cnpj;
string pmontado = "";
pmontado = aux.Substring(0, 2) + ".";
pmontado += aux.Substring(2, 3) + ".";
pmontado += aux.Substring(5, 3) + "/";
pmontado += aux.Substring(8, 4) + "-";
pmontado += aux.Substring(12, 2);
return pmontado;
}
public override string ToString()
{
return _cnpj;
}
}
Um comentário:
Bacana a sua iniciativa de colocar um código de uso tão frequente, permitindo que as pessoas não precisem "reinventar a roda".
Bom karma pra vc!
Valeu!
Postar um comentário