//Função para Cálculo do Digito do CPF/CNPJ //
function DigitoCPFCNPJ(numCIC) 
{
	var numDois = numCIC.substring(numCIC.length-2, numCIC.length);
	var novoCIC = numCIC.substring(0, numCIC.length-2);
	switch (numCIC.length)
	{
		case 11 :
		numLim = 11;
		break;
		case 14 :
		numLim = 9;
		break;
		default : return false;
	}
	var numSoma = 0;
	var Fator = 1;
	for (var i=novoCIC.length-1; i>=0 ; i--) 
	{
		Fator = Fator + 1;
		if (Fator > numLim) 
		{
		Fator = 2;
		}
		numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
	}
	
	numSoma = numSoma/11;
	var numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
	if (numResto > 1) {
	numResto = 11 - numResto;
	}
	else {
	numResto = 0;
}
//-- Primeiro dígito calculado. Fará parte do novo cálculo.

var numDigito = String(numResto);
novoCIC = novoCIC.concat(numResto);
//--
numSoma = 0;
Fator = 1;
for (var i=novoCIC.length-1; i>=0 ; i--) {
Fator = Fator + 1;
if (Fator > numLim) {
Fator = 2;
}
numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
}
numSoma = numSoma/11;
numResto = numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
if (numResto > 1) {
numResto = 11 - numResto;
}
else {
numResto = 0;
}
//-- Segundo dígito calculado.
numDigito = numDigito.concat(numResto);
if (numDigito == numDois) {
return true;
}
else {
return false;
}
}
//--< Fim da Função >--

//-- Retorna uma string apenas com os números da string enviada
function ApenasNum(strParm) {
strParm = String(strParm);
var chrPrt = "0";
var strRet = "";
var j=0;
for (var i=0; i < strParm.length; i++) {
chrPrt = strParm.substring(i, i+1);
if ( chrPrt.match(/\d/) ) {
if (j==0) {
strRet = chrPrt;
j=1;
}
else {
strRet = strRet.concat(chrPrt);
}
}
}
return strRet;
}
//--< Fim da Função >--

//-- Somente aceita os caracteres válidos para CPF e CNPJ.
function PreencheCIC(objCIC) {
var chrP = objCIC.value.substring(objCIC.value.length-1, objCIC.value.length);

if ( !chrP.match(/[0-9]/) && !chrP.match(/[\/.-]/) ) {
objCIC.value = objCIC.value.substring(0, objCIC.value.length-1);
return false;
}
return true;
}
//--< Fim da Função >--

function FormataCIC (numCIC) {
numCIC = String(numCIC);
switch (numCIC.length){
case 11 :
return numCIC.substring(0,3) + "." + numCIC.substring(3,6) + "." + numCIC.substring(6,9) + "-" + numCIC.substring(9,11);
case 14 :
return numCIC.substring(0,2) + "." + numCIC.substring(2,5) + "." + numCIC.substring(5,8) + "/" + numCIC.substring(8,12) + "-" + numCIC.substring(12,14);
default :
alert("Tamanho incorreto do CPF ou CNPJ!");
return "";
}
}

//-- Remove os sinais, deixando apenas os números e reconstroi o CPF ou CNPJ, verificando a validade
//-- Recebe como parâmetros o número do CPF ou CNPJ, com ou sem sinais e o atualiza com sinais é validado.
function ConfereCIC(objCIC) {
if (objCIC.value == null) {
alert("Preenchimento obrigatório do CPF ou CNPJ");
return false;
}
var strCPFPat = /^\d{3}\.\d{3}\.\d{3}-\d{2}$/;
var strCNPJPat = /^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/;

numCPFCNPJ = ApenasNum(objCIC.value);

if (!DigitoCPFCNPJ(numCPFCNPJ)) {
alert("Atenção o Dígito verificador do CPF ou CNPJ é inválido!");
return false;
}

objCIC.value = FormataCIC(numCPFCNPJ);

if (objCIC.value.match(strCNPJPat)) {
return true;
}
else if (objCIC.value.match(strCPFPat)) {
return true;
}
else {
alert("Digite um CPF ou CNPJ válido!");
return false;
}
}
//Fim da Função para Cálculo do Digito do CPF/CNPJ
