// Documento JavaScript  //
// Francisco C Paulino - Tofinha - fcptofinha@hotmail.com //
//CFUG-DF (www.cfugdf.com.br) - membership@cfugdf.com.br   //
// 06/11/2002 //
//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 obrigatorio 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("CPF ou CNPJ incorreto.");
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 valido!");
return false;
}
}
//Fim da Função para Cálculo do Digito do CPF/CNPJ