fork download
  1. using static System.Console;
  2. using System;
  3.  
  4. public class Test {
  5. public static void Main() {
  6. (var ok, var digitos) = ValidarCnpj("12345678901234");
  7. if (!ok) WriteLine($"Dígitos finais corretos seriam {digitos}");
  8. (ok, digitos) = ValidarCnpj("12.345.678.9012-34");
  9. if (!ok) WriteLine($"Dígitos finais corretos seriam {digitos}");
  10. }
  11. static (bool, string) ValidarCnpj(string cnpj) {
  12. if (cnpj.Length < 14) return (false, "");
  13. Span<int> digitos = stackalloc int[14];
  14. for (int i = 0, j = 0; i < 14; j++) if (char.IsDigit(cnpj[j])) digitos[i++] = cnpj[j] - 48;
  15. int soma = 0, soma2 = 0;
  16. soma += digitos[0] * 5;
  17. soma2 += digitos[0] * 6;
  18. soma += digitos[1] * 4;
  19. soma2 += digitos[1] * 5;
  20. soma += digitos[2] * 3;
  21. soma2 += digitos[2] * 4;
  22. soma += digitos[3] * 2;
  23. soma2 += digitos[3] * 3;
  24. soma += digitos[4] * 9;
  25. soma2 += digitos[4] * 2;
  26. soma += digitos[5] * 8;
  27. soma2 += digitos[5] * 9;
  28. soma += digitos[6] * 7;
  29. soma2 += digitos[6] * 8;
  30. soma += digitos[7] * 6;
  31. soma2 += digitos[7] * 7;
  32. soma += digitos[8] * 5;
  33. soma2 += digitos[8] * 6;
  34. soma += digitos[9] * 4;
  35. soma2 += digitos[9] * 5;
  36. soma += digitos[10] * 3;
  37. soma2 += digitos[10] * 4;
  38. soma += digitos[11] * 2;
  39. soma2 += digitos[11] * 3;
  40. var resto = soma % 11;
  41. var dv = digitos[12];
  42. digitos[12] = resto < 2 ? 0 : 11 - resto;
  43. soma2 += digitos[12] * 2;
  44. var ok = digitos[12] == dv;
  45. resto = soma2 % 11;
  46. dv = digitos[13];
  47. digitos[13] = resto < 2 ? 0 : 11 - resto;
  48. return (ok && digitos[13] == dv, string.Concat(digitos[12], digitos[13]));
  49. }
  50. }
  51.  
  52. //https://pt.stackoverflow.com/q/60577/101
Success #stdin #stdout 0.05s 24708KB
stdin
Standard input is empty
stdout
Dígitos finais corretos seriam 30
Dígitos finais corretos seriam 30