Face I use this function, it has 3 methods, one to validate only CPF other only for CNPJ and another called document that validates both according to the amount of characters in the field. It validates without needing to make dependencies and if the field has empty it does not stick in the field.
jQuery.validator.addMethod("documento", function(value, element) {
// remove pontuações
value = value.replace('.', '');
value = value.replace('.', '');
value = value.replace('-', '');
value = value.replace('/', '');
if (value.length <= 11) {
if (jQuery.validator.methods.cpf.call(this, value, element)) {
return true;
} else {
this.settings.messages.documento = "Informe um CPF valido.";
}
}
else if (value.length <= 14) {
if (jQuery.validator.methods.cnpj.call(this, value, element)) {
return true;
} else {
this.settings.messages.documento = "Informe um CNPJ valido.";
}
}
return false;
}, "Informe um documento valido.");
// validação do CPF
jQuery.validator.addMethod("cpf", function(value, element) {
value = jQuery.trim(value);
value = value.replace('.', '');
value = value.replace('.', '');
cpf = value.replace('-', '');
while (cpf.length < 11)
cpf = "0" + cpf;
var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
var a = [];
var b = 0;
var c = 11;
for (i = 0; i < 11; i++) {
a[i] = cpf.charAt(i);
if (i < 9)
b += (a[i] * --c);
}
if ((x = b % 11) < 2) {
a[9] = 0;
} else {
a[9] = 11 - x;
}
b = 0;
c = 11;
for (y = 0; y < 10; y++)
b += (a[y] * c--);
if ((x = b % 11) < 2) {
a[10] = 0;
} else {
a[10] = 11 - x;
}
var retorno = true;
if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg))
retorno = false;
return this.optional(element) || retorno;
}, "Informe um CPF válido.");
// validação do CNPJ
jQuery.validator.addMethod("cnpj", function(cnpj, element) {
cnpj = jQuery.trim(cnpj);// retira espaços em branco
// DEIXA APENAS OS NÚMEROS
cnpj = cnpj.replace('/', '');
cnpj = cnpj.replace('.', '');
cnpj = cnpj.replace('.', '');
cnpj = cnpj.replace('-', '');
var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;
digitos_iguais = 1;
if (cnpj.length < 14 && cnpj.length < 15) {
return false;
}
for (i = 0; i < cnpj.length - 1; i++) {
if (cnpj.charAt(i) != cnpj.charAt(i + 1)) {
digitos_iguais = 0;
break;
}
}
if (!digitos_iguais) {
tamanho = cnpj.length - 2;
numeros = cnpj.substring(0, tamanho);
digitos = cnpj.substring(tamanho);
soma = 0;
pos = tamanho - 7;
for (i = tamanho; i >= 1; i--) {
soma += numeros.charAt(tamanho - i) * pos--;
if (pos < 2) {
pos = 9;
}
}
resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
if (resultado != digitos.charAt(0)) {
return false;
}
tamanho = tamanho + 1;
numeros = cnpj.substring(0, tamanho);
soma = 0;
pos = tamanho - 7;
for (i = tamanho; i >= 1; i--) {
soma += numeros.charAt(tamanho - i) * pos--;
if (pos < 2) {
pos = 9;
}
}
resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
if (resultado != digitos.charAt(1)) {
return false;
}
return true;
} else {
return false;
}
}, "Informe um CNPJ valido."); // Mensagem padrão
What is the message that appears to you when you place no number on the Form? What do you mean
cpf: true
?– Jorge B.
Jorge I took this and it seems to be working, I hadn’t paid attention to it, I picked up an example on the net but it seems to have given
– Clayton Eduardo Mergulhão
Anything can rule it :)
– Jorge B.
precise yes, Cpf is a function I added to the scrip to validate Cpf.
– Clayton Eduardo Mergulhão
Look at my answer.
– Jorge B.