Showing
1 changed file
with
28 additions
and
1 deletions
@@ -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 |
-
Please register or login to post a comment