Package br.com.caelum.stella.validation.ie

Source Code of br.com.caelum.stella.validation.ie.IEBahiaValidator

package br.com.caelum.stella.validation.ie;

import java.util.regex.Pattern;

import br.com.caelum.stella.DigitoPara;
import br.com.caelum.stella.MessageProducer;
import br.com.caelum.stella.SimpleMessageProducer;

/**
* <p>
* Documentação de referência:
* </p>
* <a href="http://www.pfe.fazenda.sp.gov.br/consist_ie.shtm">Secretaria da
* Fazenda do Estado de São Paulo</a> <a
* href="http://www.sintegra.gov.br/Cad_Estados/cad_BA.html">SINTEGRA - ROTEIRO
* DE CRÍTICA DA INSCRIÇÃO ESTADUAL </a>
*
*/
public class IEBahiaValidator extends AbstractIEValidator {

  /*
   * 612345-57
   *
   * 123456-63
   */
  public static final Pattern FORMATED = Pattern.compile("(\\d{6,7}-\\d{2})|(\\d{2,3}\\.\\d{3}\\.\\d{3})");

  public static final Pattern UNFORMATED = Pattern.compile("\\d{8,9}");

  /**
   * Este considera, por padrão, que as cadeias estão formatadas e utiliza um
   * {@linkplain SimpleMessageProducer} para geração de mensagens.
   */
  public IEBahiaValidator() {
    super(true);
  }

  /**
   * O validador utiliza um {@linkplain SimpleMessageProducer} para geração de
   * mensagens.
   *
   * @param isFormatted
   *            considerar cadeia formatada quando <code>true</code>
   */
  public IEBahiaValidator(boolean isFormatted) {
    super(isFormatted);
  }

  public IEBahiaValidator(MessageProducer messageProducer, boolean isFormatted) {
    super(messageProducer, isFormatted);
  }

  @Override
  protected Pattern getUnformattedPattern() {
    return UNFORMATED;
  }

  @Override
  protected Pattern getFormattedPattern() {
    return FORMATED;
  }

  protected boolean hasValidCheckDigits(String unformattedIE) {
    String iESemDigito = unformattedIE.substring(0, unformattedIE.length() - 2);
    String digitos = unformattedIE.substring(unformattedIE.length() - 2);

    String digitosCalculados = calculaDigito(iESemDigito);

    return digitos.equals(digitosCalculados);
  }

  private String calculaDigito(String iESemDigito) {
    DigitoPara digitoPara = new DigitoPara(iESemDigito);
    digitoPara.complementarAoModulo().trocandoPorSeEncontrar("0", 10, 11);

    char charToCheck;
    if (iESemDigito.length() == 6) {
      charToCheck = iESemDigito.charAt(0);
    } else {
      charToCheck = iESemDigito.charAt(1);
    }

    switch (charToCheck) {
    case '6':
    case '7':
    case '9':
      digitoPara.mod(11);
      break;
    default:
      digitoPara.mod(10);
    }

    String digito2 = digitoPara.calcula();
    digitoPara.addDigito(digito2);
    String digito1 = digitoPara.calcula();

    return digito1 + digito2;
  }

}
TOP

Related Classes of br.com.caelum.stella.validation.ie.IEBahiaValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.