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
A linha 131 tem um typo. No final deveria estar escrito: "$1.$2.$3/$4-$5");
ResponderExcluirAtenção pro grupo 5 da expressão regular.
fora isso é um codigo muito util.
Obrigado Luiz! Realmente existia uma falha na expressão regular.
ResponderExcluir