Have Fun :)
Coloque o conteúdo abaixo dentro de um arquivo de script chamado
CPFCNPJUtil.js e utilize a instrução
<script type="text/javascript"
src="CPFCNPJUtil.js"
></script> no seu arquivo HTML.
CPFCNPFUtil : (function() {
function CPFCNPFUtil() {
};
// [private fields]
var VALUE_CANNOT_BE_NULL_OR_UNDEFINED = "value cannot be null or undefined";
var VALUE_CANNOT_BE_NULL_OR_EMPTY = "value cannot be null or empty";
var SIZE_OF_VALUE_CANNOT_BE_BIGGER_THEN_14 = "size of value cannot be bigger then 14";
var VALUE_IS_NOT_A_VALID_CPF_OR_CPNJ = "value is not a valid CPF or CPNJ";
var weightCPF = [ 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];
var weightCNPJ = [ 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 ];
// [private functions]
/**
* Preenche com zeros à direita. Ex: _fillWithZeros('123',5) irá retornar 00123
*
* @param value [string] será preenchido com zeros a direta até que possua tamanho igual ao @param [size - 1].
*
* @param size [numero] limite do tamanho da string
*/
var _fillWithZeros = function(value, size) {
var limit = size-1;
while (value.length < size-1) value = '0'.concat(value);
return value;
};
/**
* Calcula digito verificador para CPF or CPNJ
*
* @param stringBase
* [string] base do calculo do digito verificador
*
* @param weight
* array[int] representa os peso de cada caracter que compõe um
* CPF ou CNPJ
*
* @return [int] digito verificador
*/
var _calcDigit = function(stringBase, weight) {
var sum = 0;
for (var index = stringBase.length - 1, digit; index >= 0; index--) {
digit = parseInt(stringBase.substring(index, index + 1));
sum += digit * weight[weight.length - stringBase.length + index];
}
sum = 11 - sum % 11;
return sum > 9 ? 0 : sum;
};
// [public functions]
/**
* Verifica se um valor corresponde à um CPF.
*
* @param value
* [long] valor à ser testado
*
* @return [boolean] true caso seja um valor válido, false caso contrário
*/
var _isCPF = function(value) {
var CPF = _fillWithZeros(value, 12);
var firstPart = _calcDigit(CPF.substring(0, 9), weightCPF);
var lastPart = _calcDigit(CPF.substring(0, 9) + firstPart, weightCPF);
return CPF.substring(9) == firstPart +''+ lastPart;
};
/**
* Verifica se um valor corresponde à um CNPJ.
*
* @param value
* [long] valor à ser testado
*
* @return [boolean] true caso seja um valor válido, false caso contrário
*/
var _isCNPJ = function(value) {
var CNPJ = _fillWithZeros(value, 15);
var firstPart = _calcDigit(CNPJ.substring(0, 12), weightCNPJ);
var lastPart = _calcDigit(CNPJ.substring(0, 12) + firstPart, weightCNPJ);
return CNPJ.substring(12) == firstPart +''+ lastPart;
};
/**
* Formata valor para CPF 000.000.000-00 ou CNPJ 00.000.000/0000-00
*
* @param value
* [string] representa um CPF ou CNPJ
*
* @param check
* [boolean] [default=true] se true verifica se é um CPF ou CNPJ valido, se
* false apenas realiza a formatação
*
* @return CPF ou CNPJ formatado
*/
CPFCNPFUtil.prototype.formatCPForCPNJ = function(value, check) {
if (check == null || value == undefined) {
check = true;
}
if (value == null || value == undefined) {
throw VALUE_CANNOT_BE_NULL_OR_UNDEFINED;
}
value = value.replace(/[^0-9]+/,'');
var valueSize = value.length;
if (valueSize > 14) {
throw SIZE_OF_VALUE_CANNOT_BE_BIGGER_THEN_14;
}
if (check && !this.isCPForCPNJ(value)) {
throw VALUE_IS_NOT_A_VALID_CPF_OR_CPNJ;
}
var fullValue = '';
var isCPF = valueSize < 12;
if (isCPF) {
fullValue = _fillWithZeros(value, 12);
fullValue = fullValue.replace(/([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{2})/, "$1.$2.$3-$4");
} else {
fullValue = _fillWithZeros(value, 15);
fullValue = fullValue.replace(/([0-9]{2})([0-9]{3})([0-9]{3})([0-9]{4})([0-9]{2})/, "$1.$2.$3/$4-$5");
}
return fullValue;
};
/**
* Verifica se um valor corresponde à um CPF ou CNPJ válido.
*
* @param value
* [string] valor à ser testado
*
* @return [boolean] true caso seja um valor válido, false caso contrário
*/
CPFCNPFUtil.prototype.isCPForCPNJ = function(value) {
if (value == null || value.length == 0) {
throw VALUE_CANNOT_BE_NULL_OR_EMPTY;
}
value = value.replace(/[^0-9]+/,'');
var valueSize = value.length;
if (valueSize > 14) {
return false;
}
var isCPF = valueSize < 12;
return isCPF ? _isCPF(value) : _isCNPJ(value);
};
return CPFCNPFUtil;
})();
Segue trecho de código que pode ser utilizado para entender o funcionamento desse objeto.
var test = new CPFCNPFUtil();
alert(test.isCPForCPNJ('92534262000154')); // Verificando CNPJ
alert(test.formatCPForCPNJ('92534262000154')); // Verificando e Formatando CPF
alert(test.formatCPForCPNJ('925342-[]=62000154')); // Verificando e Formatando CPF
alert(test.formatCPForCPNJ('9253426200015')); // Error ao tentar formatar
alert(test.formatCPForCPNJ('9253426200015',false)); // Apenas Formatando
alert(test.isCPForCPNJ('28765254619')); // Verificando CPF
alert(test.formatCPForCPNJ('28765254619')); // Verificando e Formatando CPF
alert(test.formatCPForCPNJ('2()_=8765254619')); // Verificando e Formatando CPF
alert(test.formatCPForCPNJ('2876525461')); // Error ao tentar formatar
alert(test.formatCPForCPNJ('2876525461',false)); // Apenas Formatando