Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.util;

import org.apache.commons.lang3.StringUtils;

import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.util.VerificadorUtil;

public class CodigoBarraEAN {

    public static Long ean13toLong(String barcode, String propertyName, boolean required) {
                if(barcode==null) {
                        if(required) {
                                throw new NegocioException("O campo " + propertyName + " deve ser preenchido", propertyName);
                        } else {
                                return null;
                        }
                }
                if(barcode.length()==13) {
                        throw new NegocioException("O campo " + propertyName + " deve estar no formato EAN13 e deve ter no máximo 13 caracteres", propertyName);
                }              
                int dif = 13 - barcode.length();
                for(int i=0; i < dif ; i++) {                  
                        barcode = "0" + barcode;
                }              
                int[] digitos = new int[13];
                for(int i=0; i < 13 ; i++) {
                        try {
                                digitos[i] = Integer.parseInt(barcode.substring(i, i+1));
                        } catch(Exception ex) {
                                throw new NegocioException("O campo " + propertyName + " deve ser composto apenas por números", propertyName);
                        }
                }
                int aux1 = digitos[1] + digitos[3] + digitos[5] + digitos[7] + digitos[9] + digitos[11];
                aux1 = aux1 * 3;
                int aux2 = digitos[0] + digitos[2] + digitos[4] + digitos[6] + digitos[8] + digitos[10];
                int aux3 = aux1 + aux2;        
                int aux4 = 10 - (aux3 % 10);
                if(aux4 == 10) {
                        aux4 = 1;
                }
                if(digitos[12]!= aux4) {
                        throw new NegocioException("O digito verificador do campo " + propertyName + " não confere", propertyName);
                }      
                return new Long(barcode.substring(0,12));
        }
   
        public static String longToEan13(String codigo) {
                if(codigo==null) {
                        return null;
                }
                String barcode = codigo.toString();
                int dif = 12 - barcode.length();
                for(int i=0; i < dif ; i++) {                  
                        barcode = "0" + barcode;
                }              
                int[] digitos = new int[12];
                for(int i=0; i < 12 ; i++) {                   
                        digitos[i] = Integer.parseInt(barcode.substring(i, i+1));
                }
                int aux1 = digitos[1] + digitos[3] + digitos[5] + digitos[7] + digitos[9] + digitos[11];
                aux1 = aux1 * 3;
                int aux2 = digitos[0] + digitos[2] + digitos[4] + digitos[6] + digitos[8] + digitos[10];
                int aux3 = aux1 + aux2;        
                int aux4 = 10 - (aux3 % 10);
                if (aux4 == 10) {
                        aux4 = 0;
                }
                return barcode + aux4;
        }

    public static String gerarCodigoBarras(String codigo) {
        codigo = "9" + String.format("%011d", new Long(codigo));
        return longToEan13(codigo);
    }
   
    public static String retornarCodigoDoCodigoBarras(String codigoBarras) {
        if (VerificadorUtil.naoEstaNuloOuVazio(codigoBarras)) {
                if (codigoBarras.length() > 0) {
                        codigoBarras = Long.valueOf(StringUtils.substring(codigoBarras, 1, codigoBarras.length()-1)).toString();
                        return String.format("%06d", new Long(codigoBarras));
                }
        }
        return codigoBarras;
    }
   
    public static Boolean validarCodigoBarras(String filtro) {
                if (VerificadorUtil.naoEstaNuloOuVazio(filtro)) {
                        return filtro.length() == 13 && filtro.startsWith("9");
                }
                return false;
        }
   
    public static void main(String[] args) {
        System.out.println(retornarCodigoDoCodigoBarras("9000000000018"));
//      System.out.println(gerarCodigoBarras("114"));
//      System.out.println(gerarCodigoBarras("113"));
//      System.out.println(gerarCodigoBarras("117"));
//      System.out.println(gerarCodigoBarras("116"));
//      System.out.println(gerarCodigoBarras("115"));
//      System.out.println(gerarCodigoBarras("122"));
//      System.out.println(gerarCodigoBarras("126"));
//      System.out.println(gerarCodigoBarras("124"));
//      System.out.println(gerarCodigoBarras("21"));
//      System.out.println(gerarCodigoBarras("128"));
//      System.out.println(gerarCodigoBarras("120"));
//      System.out.println(gerarCodigoBarras("122"));
//      System.out.println(gerarCodigoBarras("97"));
//      System.out.println(gerarCodigoBarras("56"));
//      System.out.println(gerarCodigoBarras("57"));
//      System.out.println(gerarCodigoBarras("86"));
//      System.out.println(retornarCodigoDoCodigoBarras("9000000000018"));
//              System.out.println(gerarCodigoBarras("1"));9000000000018
//      System.out.println(gerarCodigoBarras("17"));
//      System.out.println(gerarCodigoBarras("66"));
//      System.out.println(gerarCodigoBarras("24"));
//      System.out.println(gerarCodigoBarras("78"));
//      System.out.println(gerarCodigoBarras("34"));
//      System.out.println(gerarCodigoBarras("69"));
//      System.out.println(gerarCodigoBarras("31"));
//      System.out.println(gerarCodigoBarras("82"));
//      System.out.println(gerarCodigoBarras("85"));
//      System.out.println(gerarCodigoBarras("32"));
//      System.out.println(gerarCodigoBarras("51"));
//      System.out.println(gerarCodigoBarras("84"));
//      System.out.println(gerarCodigoBarras("54"));
//      System.out.println(gerarCodigoBarras("55"));
//      System.out.println(gerarCodigoBarras("45"));
//      System.out.println(gerarCodigoBarras("74"));
//      System.out.println(gerarCodigoBarras("33"));
//      System.out.println(gerarCodigoBarras("64"));
//      System.out.println(gerarCodigoBarras("70"));
//      System.out.println(gerarCodigoBarras("20"));
//      System.out.println(gerarCodigoBarras("6"));
//      System.out.println(gerarCodigoBarras("46"));
//      System.out.println(gerarCodigoBarras("56"));
//      System.out.println(gerarCodigoBarras("25"));
//      System.out.println(gerarCodigoBarras("5"));
//      System.out.println(gerarCodigoBarras("11"));
//      System.out.println(gerarCodigoBarras("83"));
//      System.out.println(gerarCodigoBarras("57"));
//      System.out.println(gerarCodigoBarras("48"));
//      System.out.println(gerarCodigoBarras("73"));
//      System.out.println(gerarCodigoBarras("58"));
//      System.out.println(gerarCodigoBarras("7"));
//      System.out.println(gerarCodigoBarras("86"));
//      System.out.println(gerarCodigoBarras("87"));
//      System.out.println(gerarCodigoBarras("88"));
        }

}