validarCUIT static method
Funcion utilizada para validar un numero de cuit.
parametros:
cuites el numero de cuit que se va a validar este puede incluir los guiones es decir que el cuit puede ser20-12345678-9o20123456789
retorno:
truesi el cuit es validfalsesi el cuit es invalido
Implementation
static bool validarCUIT(String cuit) {
try {
// 1. Eliminar cualquier guion que pueda contener el parámetro.
cuit = cuit.replaceAll('-', '');
// 2. Verificar que tenga exactamente 11 caracteres.
if (cuit.length != 11) {
return false;
}
// 3. Verificar que todos los caracteres sean dígitos.
final regexNumerico = RegExp(r'^\d+$');
if (!regexNumerico.hasMatch(cuit)) {
return false;
}
// 4. Definir los factores de multiplicación según la posición.
// Estos factores se aplican a los primeros 10 dígitos del CUIT.
final factores = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
// 5. Calcular la suma de (digito * factor).
int suma = 0;
for (int i = 0; i < 10; i++) {
final digito = int.parse(cuit[i]);
suma += digito * factores[i];
}
// 6. Obtener el resto del total anterior al dividir por 11.
final resto = suma % 11;
// 7. El dígito verificador teórico se calcula como 11 - resto.
int digitoVerificadorCalculado = 11 - resto;
// 8. Ajustes según la normativa:
// - Si el resultado es 11, el dígito verificador es 0.
// - Si el resultado es 10, el CUIT se considera inválido.
if (digitoVerificadorCalculado == 11) {
digitoVerificadorCalculado = 0;
} else if (digitoVerificadorCalculado == 10) {
return false;
}
// 9. Comparar el dígito verificador con el último dígito del CUIT.
final digitoVerificadorReal = int.parse(cuit[10]);
return digitoVerificadorCalculado == digitoVerificadorReal;
} catch (e) {
FlutterUtilsProvider.logDebug('Error al validar CUIT: $e');
return false;
}
}