Showing
1 changed file
with
27 additions
and
0 deletions
| @@ -304,6 +304,33 @@ class GetUtils { | @@ -304,6 +304,33 @@ class GetUtils { | ||
| 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