validarInscricaoEstadual method

bool validarInscricaoEstadual(
  1. dynamic value
)

Implementation

bool validarInscricaoEstadual(dynamic value) {
  if (value == null) {
    return false;
  }

  value = flatString(value);

  String strBase;
  String strBase2;
  String strOrigem;
  String strDigito1;
  String strDigito2;
  int intPos = 0;
  int intValor = 0;
  int intSoma = 0;
  int intResto = 0;
  int intNumero = 0;
  int intPeso = 0;
  int intDig = 0;
  strBase = "";
  strBase2 = "";
  strOrigem = "";

  if (value.flatEqual("ISENTO")) {
    return true;
  }

  for (int intPos = 0; intPos < value.trim().length; intPos++) {
    if ("0123456789P".contains(value.trim().substring(intPos, intPos + 1), 0)) {
      strOrigem += value.trim().substring(intPos, intPos + 1);
    }
  }
  consoleLog("Validando IE para $uf");
  switch (this) {
    case Estado.ac: //Acre
      String strBase = ("${strOrigem.trim()}000000000").first(13);
      int d01 = int.parse(strBase.first());
      int d02 = int.parse(strBase.substring(1, 2));
      int d03 = int.parse(strBase.substring(2, 3));
      int d04 = int.parse(strBase.substring(3, 4));
      int d05 = int.parse(strBase.substring(4, 5));
      int d06 = int.parse(strBase.substring(5, 6));
      int d07 = int.parse(strBase.substring(6, 7));
      int d08 = int.parse(strBase.substring(7, 8));
      int d09 = int.parse(strBase.substring(8, 9));
      int d10 = int.parse(strBase.substring(9, 10));
      int d11 = int.parse(strBase.substring(10, 11));
      int dv01 = int.parse(strBase.substring(11, 12));
      int dv02 = int.parse(strBase.substring(12, 13));

      if (d01 != 0 || d02 != 1) {
        return false;
      }

      int ds = 4 * d01 + 3 * d02 + 2 * d03 + 9 * d04 + 8 * d05 + 7 * d06 + 6 * d07 + 5 * d08 + 4 * d09 + 3 * d10 + 2 * d11;

      int aux1 = (ds ~/ 11) * 11;
      int aux2 = ds - aux1;
      int digverificador1 = 11 - aux2;

      if (digverificador1 == 10 || digverificador1 == 11) {
        digverificador1 = 0;
      }

      ds = 5 * d01 + 4 * d02 + 3 * d03 + 2 * d04 + 9 * d05 + 8 * d06 + 7 * d07 + 6 * d08 + 5 * d09 + 4 * d10 + 3 * d11 + 2 * digverificador1;

      aux1 = (ds ~/ 11) * 11;
      aux2 = ds - aux1;
      int digverificador2 = 11 - aux2;

      if (digverificador2 == 10 || digverificador2 == 11) {
        digverificador2 = 0;
      }

      if (digverificador1 == dv01 && digverificador2 == dv02) {
        return true;
      }
      break;
    case Estado.al: // Alagoas
      strBase = ("${strOrigem.trim()}000000000").first(9);
      if (strBase.first(2) == "24") {
        intSoma = 0;
        for (intPos = 0; intPos < 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos, intPos + 1));
          intValor = intValor * (10 - intPos);
          intSoma = intSoma + intValor;
        }
        intSoma = intSoma * 10;
        intResto = intSoma % 11;
        strDigito1 = intResto == 10 ? "0" : intResto.toString();
        strBase2 = strBase.first(8) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.am: // Amazonas
      strBase = ("${strOrigem.trim()}000000000").first(9);
      intSoma = 0;
      for (intPos = 0; intPos < 8; intPos++) {
        intValor = int.parse(strBase.substring(intPos, intPos + 1));
        intValor = intValor * (10 - intPos);
        intSoma = intSoma + intValor;
      }
      if (intSoma < 11) {
        strDigito1 = intSoma.toString();
      } else {
        intResto = intSoma % 11;
        strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
      }
      strBase2 = strBase.first(8) + strDigito1;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.ap: // Amapa
      strBase = ("${strOrigem.trim()}000000000").first(9);
      intPeso = 0;
      intDig = 0;
      if (strBase.first(2) == "03") {
        intNumero = int.parse(strBase.first(8));
        if (intNumero >= 3000001 && intNumero <= 3017000) {
          intPeso = 5;
          intDig = 0;
        } else if (intNumero >= 3017001 && intNumero <= 3019022) {
          intPeso = 9;
          intDig = 1;
        } else if (intNumero >= 3019023) {
          intPeso = 0;
          intDig = 0;
        }
        intSoma = intPeso;
        for (intPos = 0; intPos < 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos, intPos + 1));
          intValor = intValor * (10 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 11;
        intValor = 11 - intResto;
        if (intValor == 10) {
          intValor = 0;
        } else if (intValor == 11) {
          intValor = intDig;
        }
        strDigito1 = intValor.toString();
        strBase2 = strBase.first(8) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.ba: // Bahia
      strBase = ("${strOrigem.trim()}00000000").first(8);
      if ("0123458".contains(strBase.first())) {
        intSoma = 0;
        for (intPos = 0; intPos < 6; intPos++) {
          intValor = int.parse(strBase.substring(intPos, intPos + 1));
          intValor = intValor * (8 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 10;
        strDigito2 = intResto == 0 ? "0" : (10 - intResto).toString();
        strBase2 = strBase.first(6) + strDigito2;
        intSoma = 0;
        for (intPos = 0; intPos < 7; intPos++) {
          intValor = int.parse(strBase2.substring(intPos, intPos + 1));
          intValor = intValor * (9 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 10;
        strDigito1 = intResto == 0 ? "0" : (10 - intResto).toString();
      } else {
        intSoma = 0;
        for (intPos = 0; intPos < 6; intPos++) {
          intValor = int.parse(strBase.substring(intPos, intPos + 1));
          intValor = intValor * (8 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 11;
        strDigito2 = intResto < 2 ? "0" : (11 - intResto).toString();
        strBase2 = strBase.first(6) + strDigito2;
        intSoma = 0;
        for (intPos = 0; intPos < 7; intPos++) {
          intValor = int.parse(strBase2.substring(intPos, intPos + 1));
          intValor = intValor * (9 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 11;
        strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
      }
      strBase2 = strBase.first(6) + strDigito1 + strDigito2;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.ce: // Ceara
      strBase = ("${strOrigem.trim()}000000000").first(9);
      intSoma = 0;
      for (intPos = 0; intPos < 8; intPos++) {
        intValor = int.parse(strBase.substring(intPos, intPos + 1));
        intValor = intValor * (10 - intPos);
        intSoma = intSoma + intValor;
      }
      intResto = intSoma % 11;
      intValor = 11 - intResto;
      if (intValor > 9) {
        intValor = 0;
      }
      strDigito1 = intValor.toString();
      strBase2 = strBase.first(8) + strDigito1;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.df: // Distrito Federal
      strBase = ("${strOrigem.trim()}0000000000000").first(13);
      if (strBase.first(3) == "073") {
        intSoma = 0;
        intPeso = 2;
        for (intPos = 11; intPos >= 1; intPos--) {
          intValor = int.parse(strBase.substring(intPos, intPos + 1));
          intValor = intValor * intPeso;
          intSoma = intSoma + intValor;
          intPeso = intPeso + 1;
          if (intPeso > 9) {
            intPeso = 2;
          }
        }
        intResto = intSoma % 11;
        strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
        strBase2 = strBase.first(11) + strDigito1;
        intSoma = 0;
        intPeso = 2;
        for (intPos = 12; intPos >= 1; intPos--) {
          intValor = int.parse(strBase.substring(intPos, intPos + 1));
          intValor = intValor * intPeso;
          intSoma = intSoma + intValor;
          intPeso = intPeso + 1;
          if (intPeso > 9) {
            intPeso = 2;
          }
        }
        intResto = intSoma % 11;
        strDigito2 = intResto < 2 ? "0" : (11 - intResto).toString();
        strBase2 = strBase.first(12) + strDigito2;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.es: // Espirito Santo
      strBase = ("${strOrigem.trim()}000000000").first(9);
      intSoma = 0;
      for (intPos = 0; intPos < 8; intPos++) {
        intValor = int.parse(strBase.substring(intPos, intPos + 1));
        intValor = intValor * (10 - intPos);
        intSoma = intSoma + intValor;
      }
      intResto = intSoma % 11;
      strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
      strBase2 = strBase.first(8) + strDigito1;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.go: // Goias
      strBase = ("${strOrigem.trim()}000000000").first(9);
      if (["10", "11", "15"].contains(strBase.first(2))) {
        intSoma = 0;
        for (intPos = 0; intPos < 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos, intPos + 1));
          intValor = intValor * (10 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 11;
        if (intResto == 0) {
          strDigito1 = "0";
        } else if (intResto == 1) {
          intNumero = int.parse(strBase.first(8));
          strDigito1 = (intNumero >= 10103105 && intNumero <= 10119997) ? "1" : "0";
        } else {
          strDigito1 = (11 - intResto).toString();
        }
        strBase2 = strBase.first(8) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.ma: // Maranhão
      strBase = ("${strOrigem.trim()}000000000").first(9);
      if (strBase.first(2) == "12") {
        intSoma = 0;
        for (intPos = 0; intPos < 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos, intPos + 1));
          intValor = intValor * (10 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 11;
        strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
        strBase2 = strBase.first(8) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.mt: // Mato Grosso
      while (strOrigem.length < 11) {
        strOrigem = "0$strOrigem";
      }
      String strBase = ("${strOrigem.trim()}000000000").first(11);
      int d01 = int.parse(strBase.first());
      int d02 = int.parse(strBase.substring(1, 2));
      int d03 = int.parse(strBase.substring(2, 3));
      int d04 = int.parse(strBase.substring(3, 4));
      int d05 = int.parse(strBase.substring(4, 5));
      int d06 = int.parse(strBase.substring(5, 6));
      int d07 = int.parse(strBase.substring(6, 7));
      int d08 = int.parse(strBase.substring(7, 8));
      int d09 = int.parse(strBase.substring(8, 9));
      int d10 = int.parse(strBase.substring(9, 10));
      int dfinal = int.parse(strBase.substring(10, 11));
      int ds = 3 * d01 + 2 * d02 + 9 * d03 + 8 * d04 + 7 * d05 + 6 * d06 + 5 * d07 + 4 * d08 + 3 * d09 + 2 * d10;
      int aux1 = (ds ~/ 11) * 11;
      int aux2 = ds - aux1;
      int digVerificador = aux2 == 0 || aux2 == 1 ? 0 : 11 - aux2;
      if (dfinal == digVerificador) {
        return true;
      }
      break;
    case Estado.ms: // Mato Grosso do Sul
      strBase = ("${strOrigem.trim()}000000000").first(9);
      if (strBase.first(2) == "28") {
        intSoma = 0;
        for (intPos = 1; intPos <= 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos - 1, intPos));
          intValor = intValor * (10 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 11;
        strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
        strBase2 = strBase.first(8) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.mg: // Minas Gerais
      strBase = ("${strOrigem.trim()}0000000000000").first(13);
      strBase2 = "${strBase.first(3)}0${strBase.substring(3, 11)}";
      intNumero = 2;
      for (intPos = 0; intPos < 12; intPos++) {
        intValor = int.parse(strBase2.substring(intPos, intPos + 1));
        intNumero = intNumero == 2 ? 1 : 2;
        intValor = intValor * intNumero;
        if (intValor > 9) {
          String strDigito1 = intValor.toString().padLeft(2, '0');
          intValor = int.parse(strDigito1.first()) + int.parse(strDigito1.substring(1, 2));
        }
        intSoma = intSoma + intValor;
      }
      intValor = intSoma;
      while (intValor % 10 != 0) {
        intValor = intValor + 1;
      }
      String strDigito1 = (intValor - intSoma).toString().padLeft(2, '0');
      strBase2 = strBase.first(11) + strDigito1;
      intSoma = 0;
      intPeso = 2;
      for (intPos = 11; intPos >= 1; intPos--) {
        intValor = int.parse(strBase2.substring(intPos, intPos + 1));
        intValor = intValor * intPeso;
        intSoma = intSoma + intValor;
        intPeso = intPeso + 1;
        if (intPeso > 11) {
          intPeso = 2;
        }
      }
      intResto = intSoma % 11;
      String strDigito2 = intResto < 2 ? "0" : (11 - intResto).toString();
      strBase2 = strBase2 + strDigito2;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.pa: // Para
      strBase = ("${strOrigem.trim()}000000000").first(9);
      if (strBase.first(2) == "15") {
        intSoma = 0;
        for (intPos = 0; intPos < 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos, intPos + 1));
          intValor = intValor * (10 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 11;
        strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
        strBase2 = strBase.first(8) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.pb: // Paraiba
      strBase = ("${strOrigem.trim()}000000000").first(9);
      intSoma = 0;
      for (intPos = 0; intPos < 8; intPos++) {
        intValor = int.parse(strBase.substring(intPos, intPos + 1));
        intValor = intValor * (10 - intPos);
        intSoma = intSoma + intValor;
      }
      intResto = intSoma % 11;
      intValor = 11 - intResto;
      if (intValor > 9) {
        intValor = 0;
      }
      strDigito1 = intValor.toString().substring(intValor.toString().length - 1);
      strBase2 = strBase.first(8) + strDigito1;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.pe: // Pernambuco
      strBase = ("${strOrigem.trim()}00000000000000").first(14);
      intSoma = 0;
      intPeso = 2;
      for (intPos = 13; intPos >= 1; intPos--) {
        intValor = int.parse(strBase.substring(intPos, intPos + 1));
        intValor = intValor * intPeso;
        intSoma = intSoma + intValor;
        intPeso = intPeso + 1;
        if (intPeso > 9) {
          intPeso = 1;
        }
      }
      intResto = intSoma % 11;
      intValor = 11 - intResto;
      if (intValor > 9) {
        intValor = intValor - 10;
      }
      strDigito1 = intValor.toString().substring(intValor.toString().length - 1);
      strBase2 = strBase.first(13) + strDigito1;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.pi: // Piaui
      strBase = ("${strOrigem.trim()}000000000").first(9);
      intSoma = 0;
      for (intPos = 0; intPos < 8; intPos++) {
        intValor = int.parse(strBase.substring(intPos, intPos + 1));
        intValor = intValor * (10 - intPos);
        intSoma = intSoma + intValor;
      }
      intResto = intSoma % 11;
      strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
      strBase2 = strBase.first(8) + strDigito1;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.pr: // Parana
      strBase = ("${strOrigem.trim()}0000000000").first(10);
      intSoma = 0;
      intPeso = 2;
      for (intPos = 8; intPos >= 1; intPos--) {
        intValor = int.parse(strBase.substring(intPos - 1, intPos));
        intValor = intValor * intPeso;
        intSoma = intSoma + intValor;
        intPeso = intPeso + 1;
        if (intPeso > 7) {
          intPeso = 2;
        }
      }
      intResto = intSoma % 11;
      strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
      strBase2 = strBase.first(8) + strDigito1;
      intSoma = 0;
      intPeso = 2;
      for (intPos = 9; intPos >= 1; intPos--) {
        intValor = int.parse(strBase2.substring(intPos - 1, intPos));
        intValor = intValor * intPeso;
        intSoma = intSoma + intValor;
        intPeso = intPeso + 1;
        if (intPeso > 7) {
          intPeso = 2;
        }
      }
      intResto = intSoma % 11;
      strDigito2 = intResto < 2 ? "0" : (11 - intResto).toString();
      strBase2 = strBase2 + strDigito2;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.rj: // Rio de Janeiro
      strBase = ("${strOrigem.trim()}00000000").first(8);
      intSoma = 0;
      intPeso = 2;
      for (intPos = 7; intPos >= 1; intPos--) {
        intValor = int.parse(strBase.substring(intPos - 1, intPos));
        intValor = intValor * intPeso;
        intSoma = intSoma + intValor;
        intPeso = intPeso + 1;
        if (intPeso > 7) {
          intPeso = 2;
        }
      }
      intResto = intSoma % 11;
      strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
      strBase2 = strBase.first(7) + strDigito1;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.rn: // Rio Grande do Norte
      strBase = ("${strOrigem.trim()}000000000").first(9);
      if (strBase.first(2) == "20") {
        intSoma = 0;
        for (intPos = 1; intPos <= 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos - 1, intPos));
          intValor = intValor * (10 - intPos);
          intSoma = intSoma + intValor;
        }
        intSoma = intSoma * 10;
        intResto = intSoma % 11;
        strDigito1 = intResto > 9 ? "0" : intResto.toString();
        strBase2 = strBase.first(8) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.ro: // Rondonia, estado alterado
      strBase = ("${strOrigem.trim()}000000000").first(14);
      int d01 = int.parse(strBase.first());
      int d02 = int.parse(strBase.substring(1, 2));
      int d03 = int.parse(strBase.substring(2, 3));
      int d04 = int.parse(strBase.substring(3, 4));
      int d05 = int.parse(strBase.substring(4, 5));
      int d06 = int.parse(strBase.substring(5, 6));
      int d07 = int.parse(strBase.substring(6, 7));
      int d08 = int.parse(strBase.substring(7, 8));
      int d09 = int.parse(strBase.substring(8, 9));
      int d10 = int.parse(strBase.substring(9, 10));
      int d11 = int.parse(strBase.substring(10, 11));
      int d12 = int.parse(strBase.substring(11, 12));
      int d13 = int.parse(strBase.substring(12, 13));
      int dfinal = int.parse(strBase.substring(13, 14));
      int ds = 6 * d01 + 5 * d02 + 4 * d03 + 3 * d04 + 2 * d05 + 9 * d06 + 8 * d07 + 7 * d08 + 6 * d09 + 5 * d10 + 4 * d11 + 3 * d12 + 2 * d13;
      int aux1 = (ds / 11).floor();
      aux1 = aux1 * 11;
      int aux2 = ds - aux1;
      int digVerificador = 11 - aux2;
      int restoDoCalculo;
      if (digVerificador > 9) {
        restoDoCalculo = digVerificador - 10;
      } else {
        restoDoCalculo = digVerificador;
      }
      if (dfinal != restoDoCalculo) {
        return false;
      } else {
        return true;
      }

    case Estado.rr: // Roraima
      strBase = ("${strOrigem.trim()}000000000").first(9);
      if (strBase.first(2) == "24") {
        intSoma = 0;
        for (intPos = 1; intPos <= 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos - 1, intPos));
          intValor = intValor * intPos;
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 9;
        strDigito1 = intResto.toString().substring(intResto.toString().length - 1);
        strBase2 = strBase.first(8) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.rs: // Rio Grande do Sul
      strBase = ("${strOrigem.trim()}0000000000").first(10);
      intNumero = int.parse(strBase.first(3));
      if (intNumero > 0 && intNumero < 468) {
        intSoma = 0;
        intPeso = 2;
        for (intPos = 9; intPos >= 1; intPos--) {
          intValor = int.parse(strBase.substring(intPos - 1, intPos));
          intValor = intValor * intPeso;
          intSoma = intSoma + intValor;
          intPeso = intPeso + 1;
          if (intPeso > 9) {
            intPeso = 2;
          }
        }
        intResto = intSoma % 11;
        intValor = 11 - intResto;
        if (intValor > 9) {
          intValor = 0;
        }
        strDigito1 = intValor.toString().substring(intValor.toString().length - 1);
        strBase2 = strBase.first(9) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.sc: // Santa Catarina
      strBase = ("${strOrigem.trim()}000000000").first(9);
      intSoma = 0;
      for (intPos = 1; intPos <= 8; intPos++) {
        intValor = int.parse(strBase.substring(intPos - 1, intPos));
        intValor = intValor * (10 - intPos);
        intSoma = intSoma + intValor;
      }
      intResto = intSoma % 11;
      strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
      strBase2 = strBase.first(8) + strDigito1;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.se: // Sergipe
      strBase = ("${strOrigem.trim()}000000000").first(9);
      intSoma = 0;
      for (intPos = 1; intPos <= 8; intPos++) {
        intValor = int.parse(strBase.substring(intPos - 1, intPos));
        intValor = intValor * (10 - intPos);
        intSoma = intSoma + intValor;
      }
      intResto = intSoma % 11;
      intValor = 11 - intResto;
      if (intValor > 9) {
        intValor = 0;
      }
      strDigito1 = intValor.toString().substring(intValor.toString().length - 1);
      strBase2 = strBase.first(8) + strDigito1;
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.sp: // São Paulo
      if (strOrigem.first() == "P") {
        strBase = ("${strOrigem.trim()}0000000000000").first(13);
        strBase2 = strBase.substring(1, 9);
        intSoma = 0;
        intPeso = 1;
        for (intPos = 1; intPos <= 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos - 1, intPos));
          intValor = intValor * intPeso;
          intSoma = intSoma + intValor;
          intPeso = intPeso + 1;
          if (intPeso == 2) {
            intPeso = 3;
          }
          if (intPeso == 9) {
            intPeso = 10;
          }
        }
        intResto = intSoma % 11;
        strDigito1 = intResto.toString().substring(intResto.toString().length - 1);
        strBase2 = strBase.first(8) + strDigito1 + strBase.substring(10, 13);
      } else {
        strBase = ("${strOrigem.trim()}000000000000").first(12);
        intSoma = 0;
        intPeso = 1;
        for (intPos = 1; intPos <= 8; intPos++) {
          intValor = int.parse(strBase.substring(intPos - 1, intPos));
          intValor = intValor * intPeso;
          intSoma = intSoma + intValor;
          intPeso = intPeso + 1;
          if (intPeso == 2) {
            intPeso = 3;
          }
          if (intPeso == 9) {
            intPeso = 10;
          }
        }
        intResto = intSoma % 11;
        strDigito1 = intResto.toString().substring(intResto.toString().length - 1);
        strBase2 = strBase.first(8) + strDigito1 + strBase.substring(9, 11);
        intSoma = 0;
        intPeso = 2;
        for (intPos = 11; intPos >= 1; intPos--) {
          intValor = int.parse(strBase.substring(intPos - 1, intPos));
          intValor = intValor * intPeso;
          intSoma = intSoma + intValor;
          intPeso = intPeso + 1;
          if (intPeso > 10) {
            intPeso = 2;
          }
        }
        intResto = intSoma % 11;
        strDigito2 = intResto.toString().substring(intResto.toString().length - 1);
        strBase2 = strBase2 + strDigito2;
      }
      if (strBase2 == strOrigem) {
        return true;
      }
      break;
    case Estado.to: // Tocantins
      strBase = ("${strOrigem.trim()}00000000000").first(11);
      if (["01", "02", "03", "99"].contains(strBase.substring(2, 4))) {
        strBase2 = strBase.first(2) + strBase.substring(4, 10);
        intSoma = 0;
        for (intPos = 1; intPos <= 8; intPos++) {
          intValor = int.parse(strBase2.substring(intPos - 1, intPos));
          intValor = intValor * (10 - intPos);
          intSoma = intSoma + intValor;
        }
        intResto = intSoma % 11;
        strDigito1 = intResto < 2 ? "0" : (11 - intResto).toString();
        strBase2 = strBase.first(10) + strDigito1;
        if (strBase2 == strOrigem) {
          return true;
        }
      }
      break;
    case Estado.naoDefinido:
    case Estado.suframa:
    case Estado.svcrs:
    case Estado.svcsp:
    case Estado.sincChavesRSparaSVSP:
      return false;
    case Estado.ex:
      return "$value".flatEqual("EX");
    case Estado.an:
      return Brasil.estados.any((x) => x.validarInscricaoEstadual(value));
  }

  return false;
}