//
//By Reinaldo - 07/Ago/2008
//Referência: http://pt.wikipedia.org/wiki/CNPJ
//
function validaCNPJ( strCNPJ )
{
	//Deve ter o FORMATO ##.###.###/####-##

	//Tabela para as multiplicações
	var tabelaDV = [ [5,4,3,2,9,8,7,6,5,4,3,2], [6,5,4,3,2,9,8,7,6,5,4,3] ];
	var DVs = [0,0];

	//Expressão Regular
	regExpr = /^\d{2}[.]?\d{3}[.]?\d{3}\/\d{4}-?\d{2}$/

	//Está no formato adequado?
	if(! regExpr.test(strCNPJ) ) {
		return false;
	}

	//Apenas os números do CNPJ
	strCNPJ = strCNPJ.replace(/[.\/-]/g, '');

	//Calcula o sdígitos verificadores
	for(iDV=0; iDV<2; iDV++)
	{
		//Soma os DVs
		for(j=0; j<12; j++){
			DVs[iDV] += parseInt( tabelaDV[iDV][j] * strCNPJ.charAt(j));
		}

		//O DV 2 tem uma soma a mais
		if(iDV == 1) {
			DVs[iDV] += 2 * DVs[0];
		}

		//MOD 11
		DVs[iDV] = 11 - DVs[iDV] % 11;
		DVs[iDV] = (DVs[iDV] >= 10) ? 0 : DVs[iDV];
	}

	//Verifica o DVs
	return DVs[0] == parseInt(strCNPJ.charAt(12)) && DVs[1] == parseInt(strCNPJ.charAt(13));
}

//
//By Reinaldo - 03/Nov/2008
//Referência: http://pt.wikipedia.org/wiki/CPF
//
function validaCPF( strCPF )
{
	//Deve ter o FORMATO ###.###.###-##

	//Tabela para as multiplicações
//	var tabelaDV = [ [5,4,3,2,9,8,7,6,5,4,3,2], [6,5,4,3,2,9,8,7,6,5,4,3] ];
	var DVs = [0,0];

	//Está no formato adequado?
	regExpr = /^\d{3}[.]?\d{3}[.]?\d{3}-?\d{2}$/
	if(! regExpr.test(strCPF) ) {
		return false;
	}

	//Apenas os números do CPF
	strCPF = strCPF.replace(/[.\/-]/g, '');

	//CPF inválido
	regExpr = /^(11111111111)|(22222222222)|(33333333333)|(44444444444)|(55555555555)|(66666666666)|(77777777777)|(88888888888)|(99999999999)$/
	if( regExpr.test(strCPF) ) {
		return false;
	}

	var numDVs = 2;							//Número de dígitos verificadores
	var campos = strCPF.length+1 - numDVs;	//Número de campos a serem somados

	//Calcula os DVs
	for(iDV=0; iDV<numDVs; iDV++)
	{
		for(j=campos; j>=2; j--){
			DVs[iDV] += (j+iDV)*strCPF.charAt(campos-j);
		}

		//O DV 2 tem uma soma a mais
		if(iDV == 1) {
			DVs[iDV] += (j+iDV) * DVs[0];
		}

		//MOD 11
		DVs[iDV] = 11 - DVs[iDV] % 11;
		DVs[iDV] = (DVs[iDV] >= 10) ? 0 : DVs[iDV];
	}

	//Verifica o DVs
	return DVs[0] == parseInt(strCPF.charAt(9)) && DVs[1] == parseInt(strCPF.charAt(10));
}
