$.validator.addMethod(
  "checked",
  function(value, element){
    var inp_name=($(element).attr('name'));
    if($('input[name="'+inp_name+'"]:checked').length){
      return true;
    }else{
      return false;
    }
  },
  "Escolha uma opção"
);

$.validator.addMethod(
  "dateBR",
  function(value, element) {
	var val_exp=value.split('/');
  	if(val_exp.length==3){
      var ano=val_exp[2];
      var mes=val_exp[1];
      var dia=val_exp[0];
      if((ano>=1000)&&(ano<10000)){
        if(((mes=='01')||(mes=='03')||(mes=='05')||(mes=='07')||(mes=='08')||(mes=='10')||(mes=='12'))&&(dia.match(/^(0[1-9]|[1-2][0-9]|3[0-1])$/))){
          return true;
        }else if(((mes=='04')||(mes=='06')||(mes=='09')||(mes=='07')||(mes=='08')||(mes=='11'))&&(dia.match(/^(0[1-9]|[1-2][0-9]|30)$/))){
          return true;
        }else if((mes=='02')&&(dia.match(/^(0[1-9]|1[0-9]|2[0-8])$/))){
          return true;
        }else if((mes=='02')&&(dia=='29')&&((ano%400==0)||((ano%4==0)&&(ano%100!=0)))){
          return true;
        }else{
          if($(element).val().length==0) return true; else return false;
        }
      }else if (ano.length==2){
      	if(((mes=='01')||(mes=='03')||(mes=='05')||(mes=='07')||(mes=='08')||(mes=='10')||(mes=='12'))&&(dia.match(/^(0[1-9]|[1-2][0-9]|3[0-1])$/))){
          return true;
        }else if(((mes=='04')||(mes=='06')||(mes=='09')||(mes=='07')||(mes=='08')||(mes=='11'))&&(dia.match(/^(0[1-9]|[1-2][0-9]|30)$/))){
          return true;
        }else if((mes=='02')&&(dia.match(/^(0[1-9]|1[0-9]|2[0-8])$/))){
          return true;
        }else if((mes=='02')&&(dia=='29')&&(((ano+1900)%400==0)||(((ano+1900)%4==0)&&((ano+1900)%100!=0)))){
          return true;
        }else{
          if($(element).val().length==0) return true; else return false;
        }
      }else{
        if($(element).val().length==0) return true; else return false;
      }
    }else{
      if($(element).val().length==0) return true; else return false;
    }
  },
  "Data inválida"
);

$.validator.addMethod(
  "cpf",
  function(value, element){
    var cpf=value;
    var numeros, digitos, soma, i, resultado, digitos_iguais;
    digitos_iguais = 1;
    if (cpf.length < 11) if($(element).val().length==0) return true; else return false;;
    for (i = 0; i < cpf.length - 1; i++){
      if (cpf.charAt(i) != cpf.charAt(i + 1)){
        digitos_iguais = 0;
        break;
      }
    }
    if (!digitos_iguais){
      numeros = cpf.substring(0,9);
      digitos = cpf.substring(9);
      soma = 0;
      for (i = 10; i > 1; i--){
        soma += numeros.charAt(10 - i) * i;        
      }
      resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
      if (resultado != digitos.charAt(0)) if($(element).val().length==0) return true; else return false;;
      numeros = cpf.substring(0,10);
      soma = 0;
      for (i = 11; i > 1; i--){
        soma += numeros.charAt(11 - i) * i;    
      }
      resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
      if (resultado != digitos.charAt(1)) if($(element).val().length==0) return true; else return false;;
      return true;
    }else if($(element).val().length==0) return true; else return false;
  },
  "CPF inválido"
);

jQuery.validator.addMethod("verificaCNPJ", function(value, element) {
cnpj = value.replace(/\D/g,"");
while(cnpj.length < 14) cnpj = "0"+ cnpj;
var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
var a = [];
var b = new Number;
var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];

for (i=0; i<12; i++){
a[i] = cnpj.charAt(i);
b += a[i] * c[i+1];
}

if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
b = 0;
for (y=0; y<13; y++) {
b += (a[y] * c[y]);
}

if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
if ((cnpj.charAt(12) != a[12]) || (cnpj.charAt(13) != a[13]) || cnpj.match(expReg) ) if($(element).val().length==0) return true; else return false;
return true;
}, "CNPJ inválido."); // Mensagem padrão
