using System.Text.RegularExpressions;
public static void Main()
var value = "30020587856";
var rawValue = apenasNumeros.Replace(value, "");
var digitoOriginalCpf = rawValue.Substring(9);
var digitoCalculadoCpf = CalcularDigitoCpf(rawValue);
Console.WriteLine( digitoOriginalCpf == digitoCalculadoCpf);
var digitoOriginalCnpj = rawValue.Substring(12);
var digitoCalculadoCnpj = CalcularDigitoCnpj(rawValue);
Console.WriteLine( digitoOriginalCnpj == digitoCalculadoCnpj);
Console.WriteLine("comprimento inválido");
var teste = new []{1,2,3,4,5,6};
Console.WriteLine(string.Join("-", teste.Reverse().Skip(1).Reverse()));
var type = "string(5s0)";
var start = type.IndexOf("(") +1;
var end = type.IndexOf(")");
var sub = type.Substring(start, end - start);
int.TryParse(type.Substring(start+1, end - start), out maxLength);
Console.WriteLine(maxLength);
private static readonly Regex apenasNumeros = new Regex(@"[^\d]");
private static int CalcularDigitoVerificador(string numero, int modulo, int valorZero, int[] multiplicadores)
for (int i = 0; i < numero.Length; i++)
soma += Convert.ToInt32(numero[i].ToString()) * multiplicadores[i];
var resto = soma % modulo;
private static string CalcularDigitoCpf(string numero)
var raizCpf = numero.Substring(0, 9);
var digitoUm = CalcularDigitoVerificador(raizCpf, 11, 2, new[] { 10, 9, 8, 7, 6, 5, 4, 3, 2 });
raizCpf += digitoUm.ToString();
var digitoDois = CalcularDigitoVerificador(raizCpf, 11, 2, new[] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 });
return string.Concat(digitoUm, digitoDois);
private static string CalcularDigitoCnpj(string numero)
var raizCnpj = numero.Substring(0, 12);
var digitoUm = CalcularDigitoVerificador(raizCnpj, 11, 2, new[] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 });
raizCnpj += digitoUm.ToString();
var digitoDois = CalcularDigitoVerificador(raizCnpj, 11, 2, new[] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 });
return string.Concat(digitoUm, digitoDois);