br.com.nordestefomento.jrimum.vallia.digitoverificador.CodigoDeCompensacaoBancosBACENDV.java Source code

Java tutorial

Introduction

Here is the source code for br.com.nordestefomento.jrimum.vallia.digitoverificador.CodigoDeCompensacaoBancosBACENDV.java

Source

/* 
 * Copyright 2008 JRimum Project
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 * 
 * Created at: 15/06/2008 - 12:00:00
 *
 * ================================================================================
 *
 * Direitos autorais 2008 JRimum Project
 *
 * Licenciado sob a Licena Apache, Verso 2.0 ("LICENA"); voc no pode 
 * usar esse arquivo exceto em conformidade com a esta LICENA. Voc pode obter uma 
 * cpia desta LICENA em http://www.apache.org/licenses/LICENSE-2.0 A menos que 
 * haja exigncia legal ou acordo por escrito, a distribuio de software sob esta 
 * LICENA se dar COMO EST??, SEM GARANTIAS OU CONDIES DE QUALQUER TIPO, sejam 
 * expressas ou tcitas. Veja a LICENA para a redao especfica a reger permisses 
 * e limitaes sob esta LICENA.
 * 
 * Criado em: 15/06/2008 - 12:00:00
 * 
 */

package br.com.nordestefomento.jrimum.vallia.digitoverificador;

import org.apache.commons.lang.StringUtils;

/**
 * <p>
 * Clculo para o dgito verificador do cdigo de compensao dos bancos
 * supervisionados pelo <a href="http://www.bcb.gov.br/?CHEQUESCOMPE">BACEN</a>
 * </p>
 * 
 * @author <a href="http://gilmatryx.googlepages.com">Gilmar P.S.L.</a>
 * @author Misael
 * @author Rmulo Augusto
 * 
 * @since 0.2
 * 
 * @version 0.2
 */
public class CodigoDeCompensacaoBancosBACENDV extends AbstractDigitoVerificador {

    /**
     * 
     */
    private static final long serialVersionUID = -5250684561237486022L;

    /**
     * Valor mnimo do cdigo de compensao
     */
    public static final int LIMITE_MINIMO = 1;

    /**
     * Valor mximo do cdigo de compensao
     */
    public static final int LIMITE_MAXIMO = 999;

    /**
     * <p>
     * Mesagem padro para erro.
     * </p>
     */
    private static final String MSG = "O cdigo de compensao do banco deve ser um nmero entre 1 e 999.";

    /**
     * <p>
     * Calcula o dgito verificador para cdigo de compensao passado.
     * </p>
     * 
     * @see br.com.nordestefomento.jrimum.vallia.digitoverificador.AbstractDigitoVerificador#calcule(java.lang.String)
     * 
     * @param numero
     * @return int digito
     * 
     * @throws IllegalArgumentException Caso no seja um cdigo vlido
     * 
     * @since 0.2
     */
    @Override
    public int calcule(String numero) {

        if (!isCodigoValido(numero)) {
            throw new IllegalArgumentException(MSG);
        }

        return calcule(Integer.valueOf(numero.trim()));
    }

    /**
     * <p>
     * Calcula o dgito verificador para cdigo de compensao passado.
     * </p>
     * 
     * @param numero
     * 
     * @return int digito
     * 
     * @since 0.2
     */
    public int calcule(int numero) {

        return calcule((long) numero);
    }

    /**
     * <p>
     * Calcula o dgito verificador para cdigo de compensao passado.
     * </p>
     * 
     * @param numero
     * 
     * @return int digito
     * 
     * @since 0.2
     * 
     * @see br.com.nordestefomento.jrimum.vallia.digitoverificador.AbstractDigitoVerificador#calcule(long)
     */
    @Override
    public int calcule(long numero) {

        int dv = -1;

        if (!isCodigoValido(numero)) {
            throw new IllegalArgumentException(MSG);
        }

        int soma = Modulo.calculeSomaSequencialMod11(String.valueOf(numero), 2, 9);

        soma *= 10;

        dv = soma % 11;

        dv = (dv == 10) ? 0 : dv;

        return dv;
    }

    /**
     * <p>
     * Retorna se um cdigo de compensao passado  vlido, ou seja, se est entre os 
     * valores inteiros de 1 a 999.
     * </p>
     * 
     * @param codigo - Cdigo de compensao
     * @return true se for nmerio entre 1 e 999; false caso contrrio
     * 
     * @since 0.2
     */
    public boolean isCodigoValido(String codigo) {

        boolean codigoValido = false;

        if (StringUtils.isNotBlank(codigo) && StringUtils.isNumeric(codigo)) {
            codigoValido = isCodigoValido(Integer.valueOf(codigo.trim()));
        }

        return codigoValido;
    }

    /**
     * <p>
     * Retorna se um cdigo de compensao passado  vlido.
     * </p>
     * 
     * @param codigo - Cdigo de compensao
     * @return true se entre 0 (no incluso) e 999; false caso contrrio
     * 
     * @since 0.2
     */
    public boolean isCodigoValido(int codigo) {

        return isCodigoValido((long) codigo);
    }

    /**
     * <p>
     * Retorna se um cdigo de compensao passado  vlido.
     * </p>
     * 
     * @param codigo - Cdigo de compensao
     * @return true se entre 0 (no incluso) e 999; false caso contrrio
     * 
     * @since 0.2
     */
    public boolean isCodigoValido(long codigo) {

        return (codigo >= LIMITE_MINIMO) && (codigo <= LIMITE_MAXIMO);
    }
}