﻿function retiraFormatacao(str) {
    return str.replace(/[^\d]/g, '');
}

// Validação de CPF e CNPJ
function valida_CPFCNPJ(oSrc,args){
    args.Value = retiraFormatacao(args.Value);
    if (args.Value.length == 11){
        valida_CPF(oSrc,args);
    }else if(args.Value.length == 14){
        valida_CNPJ(oSrc, args);
    }else{
        //alert('CPF/CNPJ inválido');
        args.IsValid = false;
    }
    
    return args.IsValid;
}

//Validação de CPF
function valida_CPF(oSrc,args){
    s = retiraFormatacao(args.Value);
    //args.isValid = (s >= 3);
    //document.write(oSrc.Value + ',' + args.Value);
    if (isNaN(s)) {
        //alert('CPF inválido');
        return args.IsValid = false;
    }
    var i;
    var c = s.substr(0,9);
    var dv = s.substr(9,2);
    var d1 = 0;
    for (i = 0; i < 9; i++) {
        d1 += c.charAt(i)*(10-i);
    }
    if (d1 == 0){
        //alert('CPF inválido');
        return args.IsValid = false;
    } 
    d1 = 11 - (d1 % 11);
    if (d1 > 9) d1 = 0; 
    if (dv.charAt(0) != d1) {
        //alert('CPF inválido');
        return args.IsValid = false; 
    }
    d1 *= 2;
    for (i = 0; i < 9; i++) {
        d1 += c.charAt(i)*(11-i);
    }
    d1 = 11 - (d1 % 11);
    if (d1 > 9) d1 = 0;
    if (dv.charAt(1) != d1) {
        //alert('CPF inválido');
        return args.IsValid = false;
    }
    return args.IsValid = true;
} 

//Validação de CNPJ

function valida_CNPJ(oSrc, args){
    s = retiraFormatacao(args.Value);
    if (isNaN(s)) {
        //alert('CNPJ inválido');
        return args.IsValid = false;
    }
    var i;
    var c = s.substr(0,12);
    var dv = s.substr(12,2);
    var d1 = 0;
    for (i = 0; i <12; i++){
        d1 += c.charAt(11-i)*(2+(i % 8));
    }
    if (d1 == 0) 
        //alert('CNPJ inválido');
        return args.IsValid = false;
    d1 = 11 - (d1 % 11);
    if (d1 > 9) d1 = 0;
    if (dv.charAt(0) != d1){
        //alert('CNPJ inválido');
        return args.IsValid = false;
    }
    d1 *= 2;
    for (i = 0; i < 12; i++){
        d1 += c.charAt(11-i)*(2+((i+1) % 8));
    }
    d1 = 11 - (d1 % 11);
    if (d1 > 9) 
        d1 = 0;
    if (dv.charAt(1) != d1){
        //alert('CNPJ inválido');
        return args.IsValid = false;
    }
    return args.IsValid = true;
} 



