Validação de Código de Barra EAN

8 respostas
giulianon

Dae pessoal, como não achei uma classe em java pra fazer a validação de códigos de barra EAN 8 e EAN 13 resolvi faze-la.

Quem precisar tá na mão!

public boolean isValidBarCodeEAN(String barCode) {
        int digit;
        int calculated;
        String ean;
        String checkSum = "131313131313";
        int sum = 0;

        if (barCode.length() == 8 || barCode.length() == 13) {
            digit = Integer.parseInt("" + barCode.charAt(barCode.length() - 1));            
            ean = barCode.substring(0, barCode.length() - 1);            
            for (int i = 0; i <= ean.length() - 1; i++) {
                sum += (Integer.parseInt("" + ean.charAt(i))) * (Integer.parseInt("" + checkSum.charAt(i)));
            }            
            calculated = 10 - (sum % 10);            
            return (digit == calculated);
        } else {
            return false;
        }
    }

Abraço!!

Giu

8 Respostas

willianmuniz

foi de grande ajuda, valeu!

morilo

Olá, seu código foi de grande ajuda, tive apenas que fazer um pequeno ajuste quanto ao RESTO zero, mas o restante está perfeito.

emanuelmm

Só para agradecer! Acabei de usar aqui!

rogfoz

Poderia me dar uma ajuda, como uso esse código pra validar um código ean?

A
/**
 * @author Andy11x
 */
public class Barras {
    
    public static void main(String[] args) {
        //789100031550-(*) Qual é o Dígito verificador ?
        String valid, barCode = "789100031550";        
        int dv = digitEAN(barCode); //Gera digito verificador
        if(dv >= 0){
            System.out.println("Digito Varificador é: " + dv); 
            System.out.println("Codigo de Barras é: " + barCode + "-" + dv);
            //O Código de Barras é Válido ?
            valid = isValidEAN(barCode.concat(String.valueOf(dv))) == true ? "Válido" : "Inválido";
            System.out.println("Código: " + valid);       
        }else{
            System.out.println("barCode Inválido !!");             
        }                  
    }    
    
    public static boolean isValidEAN(String barCode) {
        int digit = Integer.parseInt(String.valueOf(barCode.charAt(barCode.length() - 1)));        
        return ((barCode.length() == 8 || barCode.length() == 13) && 
                (digit == (10 - (calculaEAN(barCode) % 10))));
    }      
    
    private static int calculaEAN(String barCode) {
        int sum = 0;        
        for(int i = 0, check = 1; i < barCode.length() - 1; i++) {            
            sum += (Integer.parseInt(String.valueOf(barCode.charAt(i)))) * check;
            check = (check == 1) ? 3 : 1;             
        }                
        return sum;
    }       
    
    private static int digitEAN(String barCode) {
        int s = calculaEAN(barCode), aux = s;      
        String[] str;
        if(barCode.length() == 12){
            if(s % 10 == 0){
                return 0;            
            }else{
                while(!(aux % 10 == 0)){                    
                    aux++;                    
                }     
                return aux - s;
            }              
        }else if(barCode.length() == 7){            
            str = barCode.split("");
            aux = n(str[2]) + n(str[4]) + n(str[6]);
            s = n(str[1]) + n(str[3]) + n(str[5]) + n(str[7]);
            return (10 - ((s * 3 + aux) % 10));
        } 
        return -1;        
    }    
    
    private static int n(String num) {
        return Integer.parseInt(num);
    }
}
F

giulianon:
Dae pessoal, como não achei uma classe em java pra fazer a validação de códigos de barra EAN 8 e EAN 13 resolvi faze-la.

Quem precisar tá na mão!

public boolean isValidBarCodeEAN(String barCode) {
        int digit;
        int calculated;
        String ean;
        String checkSum = "131313131313";
        int sum = 0;

        if (barCode.length() == 8 || barCode.length() == 13) {
            digit = Integer.parseInt("" + barCode.charAt(barCode.length() - 1));            
            ean = barCode.substring(0, barCode.length() - 1);            
            for (int i = 0; i <= ean.length() - 1; i++) {
                sum += (Integer.parseInt("" + ean.charAt(i))) * (Integer.parseInt("" + checkSum.charAt(i)));
            }            
            calculated = 10 - (sum % 10);            
            return (digit == calculated);
        } else {
            return false;
        }
    }

Abraço!!

Giu

Maravilha de código. Muito obrigado !

pellegrini2106

Ola galera realmente esse método e muito interessante para quem trabalha com codigo de barra EAN13, porem tem um problema!!!
Quando digito os 13 dígitos com sequencia de números pares únicas por exemplo: 0000000000000,2222222222222 ou … ele aceita. Como resolvo este problema para ele não aceitar?
Obrigado.

C

conseguiu man? todos exemplos que achei na internet sempre tem uma falha.

Criado 29 de outubro de 2008
Ultima resposta 23 de mar. de 2022
Respostas 8
Participantes 9