[RESOLVIDO] Cálculo do dígito verificador EAN 13 - Javascript

Olá pessoal

Procurei na web algo codigo para esse calcaulo e não conseguir nada.

Gostaria de trasforma isso em javascript.

a função deve vericar se o ultimo digite é igual valor final deste calculo.

Com certeza vai se util para outros usuarios.

Cálculo do dígito verificador EAN 13

Tomando como base o EAN 13 de número: 789100031550-?

    * Multiplicam-se os dígitos do código por 1 e por 3, em sequência repetitiva de 1 e 3;

        * 7 * 1 = 7
        * 8 * 3 = 24
        * 9 * 1 = 9
        * 1 * 3 = 3
        * 0 * 1 = 0
        * 0 * 3 = 0
        * 0 * 1 = 0
        * 3 * 3 = 9
        * 1 * 1 = 1
        * 5 * 3 = 15
        * 5 * 1 = 5
        * 0 * 3 = 0

        * Somando o resultado das multiplicações encontra-se o total de 73.
        * O valor total da soma das multiplicações deve ser dividido por 10:
        * 73/10 = 7.3

    * Transforme o resultado em inteiro, "arredondando" o número para baixo

        * 7

    * Some ao resultado da divisão 1

        * 7+1 = 8

    * Multiplique o resultado dessa soma por 10

        * 8*10 = 80

    * Subtraia desse resultado o valor da soma inicial das multiplicações (73)

        * 80 ? 73 = 7

    * O digito verificador é 7. Assim o código completo é: 7891000315507

Java != Javascript

Mas poste o que tu tem até agora para que seja possivel te ajudar.

[quote=Ygor]Java != Javascript

Mas poste o que tu tem até agora para que seja possivel te ajudar.[/quote]

Fiz pouco não tenho muito conhecimento em javascript

[code]

Número:
[quote]

Ai pessoal segue o código deve ajudar alguem.

<script language="JavaScript">
function ValidaEan(numero){
	factor = 3;
	sum = 0;
	numlen = numero.value.length;
	
	if (numlen == 13){
		for(index = numero.value.length; index > 0; --index){
			if (index != 13){
			sum = sum + numero.value.substring (index-1, index) * factor;
    		factor = 4 - factor;
			}
  		}
		cc = ((1000 - sum) % 10);
		ca = numero.value.substring(12);
		if(cc == ca){
			alert("EAN-13 válido");
		}
		else{
			alert("Digite um código EAN válido");
		}
	}
	
	if(numlen == 14){
		for(index = numero.value.length; index > 0; --index){
			if (index != 14){
			sum = sum + numero.value.substring (index-1, index) * factor;
    		factor = 4 - factor;
			}
  		}
		cc = ((1000 - sum) % 10);
		ca = numero.value.substring(13);
		if(cc == ca){
			alert("EAN-14 válido");
		}
		else{
			alert("Digite um código EAN válido");
		}
	}
	
	if(numlen == 8){
		for(index = numero.value.length; index > 0; --index){
			if (index != 8){
			sum = sum + numero.value.substring (index-1, index) * factor;
    		factor = 4 - factor;
			}
  		}
		cc = ((1000 - sum) % 10);
		ca = numero.value.substring(7);
		if(cc == ca){
			alert("EAN-8 válido");
		}
		else{
			alert("Digite um código EAN válido");		}
	}
	
	if(numlen == 12){
		for(index = numero.value.length; index > 0; --index){
			if (index != 12){
			sum = sum + numero.value.substring (index-1, index) * factor;
    		factor = 4 - factor;
			}
  		}
		cc = ((1000 - sum) % 10);
		ca = numero.value.substring(11);
		if(cc == ca){
			alert("EAN-12 válido");
		}
		else{
			alert("Digite um código EAN válido");
		}
	}
	
	if (((((numlen != 8) && (numlen != 12)) && (numlen != 13)) && (numlen != 14))){
		alert("Digite um código EAN válido");
	}

}
</script>

<form name="frm" id="frm">
	Código EAN: <input type="text" size="16" maxlength="14" name="numero" />
	<br /><input type="button" onClick="ValidaEan(frm.numero);" value="VALIDAR" />
</form>

Segue um método refatorado para validação escrito em Java

public boolean validaCodigoEAN(String codigo) {

	if(StringUtils.isNotBlank(codigo)
			&& (codigo.length() == 8
				|| codigo.length() == 12
					|| codigo.length() == 13
						|| codigo.length() == 14)){
		int factor = 3;
		int sum = 0;
		
		for (int index = codigo.length()-1; index &gt; 0; --index) {
			int mult = Integer.valueOf(codigo.substring(index-1, index));
			sum = sum + mult * factor;
			factor = 4 - factor;
		}
		
		int cc = ((1000 - sum) % 10);
		int ca = Integer.valueOf(codigo.substring(codigo.length()-1));
		
		if (cc == ca)
			return Boolean.TRUE;
	}
	
	return Boolean.FALSE;
}
1 curtida