Kauê Murakami

adicionando validação de digitos

@@ -303,7 +303,34 @@ class GetUtils { @@ -303,7 +303,34 @@ class GetUtils {
303 if (numeros.length != 11) return false; 303 if (numeros.length != 11) return false;
304 // Test if all CPF digits are the same 304 // Test if all CPF digits are the same
305 if (RegExp(r'^(\d)\1*$').hasMatch(numeros)) return false; 305 if (RegExp(r'^(\d)\1*$').hasMatch(numeros)) return false;
306 - 306 +
  307 + // Dividir dígitos
  308 + List<int> digitos =
  309 + numeros.split('').map((String d) => int.parse(d)).toList();
  310 +
  311 + // Calcular o primeiro dígito verificador
  312 + var calc_dv1 = 0;
  313 + for (var i in Iterable<int>.generate(9, (i) => 10 - i)) {
  314 + calc_dv1 += digitos[10 - i] * i;
  315 + }
  316 + calc_dv1 %= 11;
  317 + var dv1 = calc_dv1 < 2 ? 0 : 11 - calc_dv1;
  318 +
  319 + // Testar o primeiro dígito verificado
  320 + if (digitos[9] != dv1) return false;
  321 +
  322 + // Calcular o segundo dígito verificador
  323 + var calc_dv2 = 0;
  324 + for (var i in Iterable<int>.generate(10, (i) => 11 - i)) {
  325 + calc_dv2 += digitos[11 - i] * i;
  326 + }
  327 + calc_dv2 %= 11;
  328 +
  329 + var dv2 = calc_dv2 < 2 ? 0 : 11 - calc_dv2;
  330 +
  331 + // Testar o segundo dígito verificador
  332 + if (digitos[10] != dv2) return false;
  333 +
307 return true; 334 return true;
308 } 335 }
309 336