Java tutorial
/* * 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); } }