Use validation function in different HTML fields

1

I have the following javascript function for NIF validation:

    //VALIDAÇÃO NIF
    validaContribuinte = function(){
        var contribuinte = $('#nif').val();
        var temErro=0;
        if (
            contribuinte.substr(0,1) != '1' && // pessoa singular
            contribuinte.substr(0,1) != '2' && // pessoa singular
            contribuinte.substr(0,1) != '3' && // pessoa singular
            contribuinte.substr(0,2) != '45' && // pessoa singular não residente
            contribuinte.substr(0,1) != '5' && // pessoa colectiva
            contribuinte.substr(0,1) != '6' && // administração pública
            contribuinte.substr(0,2) != '70' && // herança indivisa
            contribuinte.substr(0,2) != '71' && // pessoa colectiva não residente
            contribuinte.substr(0,2) != '72' && // fundos de investimento
            contribuinte.substr(0,2) != '77' && // atribuição oficiosa
            contribuinte.substr(0,2) != '79' && // regime excepcional
            contribuinte.substr(0,1) != '8' && // empresário em nome individual (extinto)
            contribuinte.substr(0,2) != '90' && // condominios e sociedades irregulares
            contribuinte.substr(0,2) != '91' && // condominios e sociedades irregulares
            contribuinte.substr(0,2) != '98' && // não residentes
            contribuinte.substr(0,2) != '99' // sociedades civis

        ) { temErro=1;}
        var check1 = contribuinte.substr(0,1)*9;
        var check2 = contribuinte.substr(1,1)*8;
        var check3 = contribuinte.substr(2,1)*7;
        var check4 = contribuinte.substr(3,1)*6;
        var check5 = contribuinte.substr(4,1)*5;
        var check6 = contribuinte.substr(5,1)*4;
        var check7 = contribuinte.substr(6,1)*3;
        var check8 = contribuinte.substr(7,1)*2;

        var total= check1 + check2 + check3 + check4 + check5 + check6 + check7 + check8;
        var divisao= total / 11;
        var modulo11=total - parseInt(divisao)*11;
        if ( modulo11==1 || modulo11==0){ comparador=0; } // excepção
        else { comparador= 11-modulo11;}


        var ultimoDigito=contribuinte.substr(8,1)*1;
        if ( ultimoDigito != comparador ){ temErro=1;}

        if (temErro==1){
            alert('NIF Inválido' );
            $('#nif').val("");
        }
    }

How can I adapt this function to do this validation in different HTML fields? In this case I'm passing the id of the field nif: var contribuinte = $('#nif').val(); . If I want to do validation for two different inputs how can I do it?

    
asked by anonymous 20.01.2015 / 16:49

2 answers

2

You need to generalize your function so that you can call each field. Instead of looking for " $('#nif') ", look for a generic field - which can be "nif1" or "nif2", or whatever its ID, specified by a validation function parameter:

$('#nif1').change(function(){
  validaContribuinte('nif1');
});
$('#nif2').change(function(){
  validaContribuinte('nif2');
});

//VALIDAÇÃO NIF
    validaContribuinte = function(inputID){
        var contribuinte = $('#'+inputID).val();
        var temErro=0;
        if (
            contribuinte.substr(0,1) != '1' && // pessoa singular
            contribuinte.substr(0,1) != '2' && // pessoa singular
            contribuinte.substr(0,1) != '3' && // pessoa singular
            contribuinte.substr(0,2) != '45' && // pessoa singular não residente
            contribuinte.substr(0,1) != '5' && // pessoa colectiva
            contribuinte.substr(0,1) != '6' && // administração pública
            contribuinte.substr(0,2) != '70' && // herança indivisa
            contribuinte.substr(0,2) != '71' && // pessoa colectiva não residente
            contribuinte.substr(0,2) != '72' && // fundos de investimento
            contribuinte.substr(0,2) != '77' && // atribuição oficiosa
            contribuinte.substr(0,2) != '79' && // regime excepcional
            contribuinte.substr(0,1) != '8' && // empresário em nome individual (extinto)
            contribuinte.substr(0,2) != '90' && // condominios e sociedades irregulares
            contribuinte.substr(0,2) != '91' && // condominios e sociedades irregulares
            contribuinte.substr(0,2) != '98' && // não residentes
            contribuinte.substr(0,2) != '99' // sociedades civis

        ) { temErro=1;}
        var check1 = contribuinte.substr(0,1)*9;
        var check2 = contribuinte.substr(1,1)*8;
        var check3 = contribuinte.substr(2,1)*7;
        var check4 = contribuinte.substr(3,1)*6;
        var check5 = contribuinte.substr(4,1)*5;
        var check6 = contribuinte.substr(5,1)*4;
        var check7 = contribuinte.substr(6,1)*3;
        var check8 = contribuinte.substr(7,1)*2;

        var total= check1 + check2 + check3 + check4 + check5 + check6 + check7 + check8;
        var divisao= total / 11;
        var modulo11=total - parseInt(divisao)*11;
        if ( modulo11==1 || modulo11==0){ comparador=0; } // excepção
        else { comparador= 11-modulo11;}


        var ultimoDigito=contribuinte.substr(8,1)*1;
        if ( ultimoDigito != comparador ){ temErro=1;}

        if (temErro==1){
            alert('NIF Inválido' );
            $('#'+inputID).val("");
        }
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script><p><labelfor="nif1">NIF #1:</label>
  <input type="text" id="nif1" />
</p>
<p>
  <label for="nif2">NIF #2:</label>
  <input type="text" id="nif2" />
</p>
    
20.01.2015 / 17:12
2

You can use a class to apply validation. In this case I used the nif class in the inputs.

$('.nif').blur(function(){
        var contribuinte = $.trim($(this).val());
    
        var temErro=0;
        if (
            contribuinte.substr(0,1) != '1' && // pessoa singular
            contribuinte.substr(0,1) != '2' && // pessoa singular
            contribuinte.substr(0,1) != '3' && // pessoa singular
            contribuinte.substr(0,2) != '45' && // pessoa singular não residente
            contribuinte.substr(0,1) != '5' && // pessoa colectiva
            contribuinte.substr(0,1) != '6' && // administração pública
            contribuinte.substr(0,2) != '70' && // herança indivisa
            contribuinte.substr(0,2) != '71' && // pessoa colectiva não residente
            contribuinte.substr(0,2) != '72' && // fundos de investimento
            contribuinte.substr(0,2) != '77' && // atribuição oficiosa
            contribuinte.substr(0,2) != '79' && // regime excepcional
            contribuinte.substr(0,1) != '8' && // empresário em nome individual (extinto)
            contribuinte.substr(0,2) != '90' && // condominios e sociedades irregulares
            contribuinte.substr(0,2) != '91' && // condominios e sociedades irregulares
            contribuinte.substr(0,2) != '98' && // não residentes
            contribuinte.substr(0,2) != '99' // sociedades civis

        ) { temErro=1;}
        var check1 = contribuinte.substr(0,1)*9;
        var check2 = contribuinte.substr(1,1)*8;
        var check3 = contribuinte.substr(2,1)*7;
        var check4 = contribuinte.substr(3,1)*6;
        var check5 = contribuinte.substr(4,1)*5;
        var check6 = contribuinte.substr(5,1)*4;
        var check7 = contribuinte.substr(6,1)*3;
        var check8 = contribuinte.substr(7,1)*2;

        var total= check1 + check2 + check3 + check4 + check5 + check6 + check7 + check8;
        var divisao= total / 11;
        var modulo11=total - parseInt(divisao)*11;
        if ( modulo11==1 || modulo11==0){ comparador=0; } // excepção
        else { comparador= 11-modulo11;}


        var ultimoDigito=contribuinte.substr(8,1)*1;
        if ( ultimoDigito != comparador ){ temErro=1;}

        if (temErro==1){
            alert('NIF Inválido' );
            $(this).focus().val("");
        }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><inputname="nif1" class="nif" /><br />
<input name="nif2" class="nif" /><br />
<input name="nif3" class="nif" /><br />
<input name="nif4" class="nif" /><br />

I added a focus() at the end to return to the element with error.

    
20.01.2015 / 17:16