// Varificação de CPF e CNPJ versão 1.0
// Este script verifica CPF e CNPJ de acordo com o tamanho do número digitado
// Declaração dentro do campo input de CPF/CNPJ
// onBlur = "validaCPFCNPJ(value,this)"

function validaCPFCNPJ(cpfcnpjID,campoID) {

	tamanho = cpfcnpjID.length;
	var a = []; 						// Matriz para armazenar os dígitos do CPF separadamente
	var b = []; 						// Matriz para armazenar os produtos do calculo do CPF
	var soma=0; 
	var resto=0; 
	
	if(tamanho==11){ 						// Calculando o CPF
		var cpf;
		var c = [11,10,9,8,7,6,5,4,3,2]; 	// Matriz usada de base para o calculo do CPF
		cpf = cpfcnpjID;
		
		for(i=0,j=1;i<11;i++,j++){ 			// Armazena na matriz a[] todos os algarismos do CPF
			a[i] = cpf.charAt(i); 			// A função charAT() pega o valor de cada posição da String
		}
											// Calculando o primeiro dígito verificador
		for(i=0,j=1;i<9;i++,j++){ 			// Pegamos do 1º ao 9º algarismo do CPF para fazermos o cálculo
			b[i]=a[i]*c[j]; 				// Multiplicação a partir do 1º valor da matriz do cpf (a[0]) com o 2º valor da matriz de c (c[1])
			soma = b[i] + soma; 			// Armazena em 'soma' a soma todos os produtos
		}
		
		resto = soma % 11; 					// Armazena em resto o resto da divisão da soma divido por 11
		
		if(resto<2) 						// Se resto for igual menor que 2 o primeiro dígito do CPF deverá ser 0
			diga=0; 						// Armazena em diga o valor 0
		else 								// Se resto for maior ou igual a 2 deverá ser calculado o digito
			diga=11-resto;					// Neste caso o diga é igual a 11 menos o resto 
											// Fim do calculo do primeiro dígito verificador
		resto=0;							// Zera a variável resto
		soma=0;								// Zera a variável soma	
		
		for(i=0;i<10;i++){					// Pegamos do 1º ao 10º (que é o primeiro dígito verificador) algarismo do CPF para fazermos o cálculo
			b[i]=a[i]*c[i];					// Multiplicação a partir do 1º valor da matriz do cpf (a[0]) com o 1º valor da matriz de c (c[0])
			soma = b[i] + soma;				// Armazena em 'soma' a soma todos os produtos
		}
		
		resto = soma % 11;					// Armazena em resto o resto da divisão da soma divido por 11
		
		if(resto<2)							// Se resto for igual menor que 2 o primeiro dígito do CPF deverá ser 0
			digb=0;							// Armazena em digb o valor 0							
		else								// Se resto for maior ou igual a 2 deverá ser calculado o digito
			digb=11-resto;					// Neste caso o digb é igual a 11 menos o resto
		
		if(a[9]!=diga || a[10]!=digb){		// Comparando agora os dois dígitos
			alert('CPF Inválido');
			campoID.focus();
			campoID.value="";
			return false;
		}
			
	} else if (tamanho==14) { // Calculando o CNPJ
		var cnpj;
		var c = [6,5,4,3,2,9,8,7,6,5,4,3,2]; // Matriz usada de base para o calculo do CNPJ
		cnpj = cpfcnpjID;
		
		for(i=0;i<14;i++)					// Armazena na matriz a[] todos os algarismos do CNPJ
			a[i] = cnpj.charAt(i);			// A função charAT() pega o valor de cada posição da String
		
		for(i=0,j=1;i<12;i++,j++){			// Calculando o primeiro dígito verificador
			b[i] = a[i]*c[j];				// Pegamos do 1º ao 12º algarismo do CNPJ para fazermos o cálculo
			soma = soma + b[i];				// Armazena em 'soma' a soma todos os produtos
		}
		
		resto = soma % 11;					// Armazena em resto o resto da divisão da soma divido por 11
		
		if(resto<2)							// Se resto for igual menor que 2 o primeiro dígito do CNPJ deverá ser 0
			diga=0;							// Armazena em digb o valor 0
		else								// Se resto for maior ou igual a 2 deverá ser calculado o digito
			diga=11-resto;					// Neste caso o digb é igual a 11 menos o resto
		
		resto = 0;							// Zera a variável resto
		soma = 0;							// Zera a variável soma
		
		for(i=0;i<13;i++){					// Calculando o segundo dígito verificador
			b[i] = a[i]*c[i];				// Pegamos do 1º ao 13º algarismo do CNPJ para fazermos o cálculo
			soma = soma + b[i];				// Armazena em 'soma' a soma todos os produtos				
		}
		
		resto = soma % 11;					// Armazena em resto o resto da divisão da soma divido por 11
		
		if(resto<2)							// Se resto for igual menor que 2 o primeiro dígito do CNPJ deverá ser 0
			digb=0;							// Armazena em digb o valor 0
		else								// Se resto for maior ou igual a 2 deverá ser calculado o digito
			digb=11-resto;					// Neste caso o digb é igual a 11 menos o resto
			
		if(a[12]!=diga || a[13]!=digb){		// Comparando agora os dois dígitos
			alert('CNPJ Inválido');
			campoID.focus();
			campoID.value="";
			return false;
		}
	} else if (tamanho==0) {				// No caso de nada dígitado ele poderá passar pelo campo
		return false;						
	} else {								// Caso não seja digitado nem 11 nem 14 dígitos
		alert('É necessário informar 11 dígitos para CPF ou 14 dígitos para CNPJ');
		campoID.focus();
		campoID.value="";
	}
	return true;
}