Kauê Murakami

add function for cnpj validation

@@ -293,6 +293,50 @@ class GetUtils { @@ -293,6 +293,50 @@ class GetUtils {
293 /// Checks if num a EQUAL than num b. 293 /// Checks if num a EQUAL than num b.
294 static bool isEqual(num a, num b) => a == b; 294 static bool isEqual(num a, num b) => a == b;
295 295
  296 + //Check if num is a cnpj
  297 + static bool isCnpj(String cnpj) {
  298 + if (cnpj == null) return false;
  299 +
  300 + // Obter somente os números do CNPJ
  301 + var numbers = cnpj.replaceAll(RegExp(r'[^0-9]'), '');
  302 +
  303 + // Testar se o CNPJ possui 14 dígitos
  304 + if (numbers.length != 14) return false;
  305 +
  306 + // Testar se todos os dígitos do CNPJ são iguais
  307 + if (RegExp(r'^(\d)\1*$').hasMatch(numbers)) return false;
  308 +
  309 + // Dividir dígitos
  310 + List<int> digits =
  311 + numbers.split('').map((String d) => int.parse(d)).toList();
  312 +
  313 + // Calcular o primeiro dígito verificador
  314 + var calcDv1 = 0;
  315 + var j = 0;
  316 + for (var i in Iterable<int>.generate(12, (i) => i < 4 ? 5 - i : 13 - i)) {
  317 + calcDv1 += digits[j++] * i;
  318 + }
  319 + calcDv1 %= 11;
  320 + var dv1 = calcDv1 < 2 ? 0 : 11 - calcDv1;
  321 +
  322 + // Testar o primeiro dígito verificado
  323 + if (digits[12] != dv1) return false;
  324 +
  325 + // Calcular o segundo dígito verificador
  326 + var calcDv2 = 0;
  327 + j = 0;
  328 + for (var i in Iterable<int>.generate(13, (i) => i < 5 ? 6 - i : 14 - i)) {
  329 + calcDv2 += digits[j++] * i;
  330 + }
  331 + calcDv2 %= 11;
  332 + var dv2 = calcDv2 < 2 ? 0 : 11 - calcDv2;
  333 +
  334 + // Testar o segundo dígito verificador
  335 + if (digits[13] != dv2) return false;
  336 +
  337 + return true;
  338 + }
  339 +
296 /// Checks if the cpf is valid. 340 /// Checks if the cpf is valid.
297 static bool isCpf(String cpf) { 341 static bool isCpf(String cpf) {
298 if (cpf == null) return false; 342 if (cpf == null) return false;