generarCUIT static method

String generarCUIT({
  1. required String dni,
  2. required String sexo,
})

Genera un CUIT a partir de un DNI, intentando con varios prefijos.

dni se toma como número entero. Puede tener de 7 a 8 dígitos. Retorna un CUIT en el formato XX-XXXXXXXX-X o retorna vacio si no se puede generar con los prefijos configurados. sexo es la letra 'M' o 'F' para indicar el género de la persona. y de esta forma inferir el prefijo correcto.

Implementation

static String generarCUIT({required String dni, required String sexo}) {
  try {
    // Posibles prefijos para personas humanas (puedes ajustar si lo deseas).
    final posiblesPrefijos = (sexo == 'M') ? [20, 23] : [27, 23];

    // Convertimos el DNI a String, con padding a la izquierda (8 dígitos).
    final dniStr = dni.padLeft(8, '0');

    for (final prefijo in posiblesPrefijos) {
      final cuitSinDV =
          '$prefijo$dniStr'; // Ej: "20" + "12345678" => "2012345678"

      final dv = _calcularDigitoVerificador(cuitSinDV);
      if (dv != -1) {
        // Si dv == -1 significa que no es válido (caso en que daría 10).
        return '$prefijo-$dniStr-$dv';
      }
    }

    // Si ninguno de los prefijos dio un DV válido.
    throw Exception(
        'No se pudo generar un CUIT válido con los prefijos definidos.');
  } catch (e) {
    FlutterUtilsProvider.logDebug('Error al generar CUIT: $e');
    return '';
  }
}