//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!");

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!");

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)) {
objCIC.value = "";
alert("Atenção CPF 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 válido!");
objCIC.focus();
return false;

}

}

