validarCUIT static method

bool validarCUIT(
  1. String cuit
)

Funcion utilizada para validar un numero de cuit. parametros:

  • cuit es el numero de cuit que se va a validar este puede incluir los guiones es decir que el cuit puede ser 20-12345678-9 o 20123456789

retorno:

  • true si el cuit es valid
  • false si 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;
  }
}