Validação Código de Barras

Bom dia!
Estou utilizando o código abaixo para validar um código de barras.
Se o código passar na formatação eu envio o mesmo na tag da NF-e.

O problema é que o código 03946509 passa na validação mas é recusado pela SEFAZ(NF-e).
Gostaria de saber se o método esta errado e se há algum melhor para efetuar esta validação.

public static 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;
    }
    }`

Boa tarde!
Consegui entender o que esta ocorrendo.
A principio, quando se trata de ean 13, você pega os dígitos impar e multiplica por 3, porem se for ean 8 seria os pares.

Então quando for ean 8 eu mudei a checkSum para 313131313131

Nos testes que fiz funcionou.