Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Problema con JS controllo codice fiscale

    Salve a tutti!

    La funzione è questa:
    codice:
    function Check_Cod_Fisc(Cod_Fisc) 
    {
    			
    
    		var strcognome		
    		strcognome=""
    		
    		
    		  // Processa il cognome
    		  //----------------------------------------------------------------
    		    for (i=0; i<document.MioForm.Cognome.value.length; i++) 
    		        {
    				switch (document.MioForm.Cognome.value.charAt(i)) 
    		                {
    		                  case 'A':
    		                  case 'E':
    		                  case 'I':
    		                  case 'O':
    		                  case 'U': break;            
    		                  default : 
    		                  if((document.MioForm.Cognome.value.charAt(i)<='Z')&& (document.MioForm.Cognome.value.charAt(i)>'A')) {
    		                   strcognome = strcognome + document.MioForm.Cognome.value.charAt(i); }
    		                }
    		        }
    		    if (strcognome.length < 3) 
    		      {
    		       for (i=0; i<document.MioForm.Cognome.value.length; i++) 
    		          {
    		           switch (document.MioForm.Cognome.value.charAt(i)) 
    		                 {
    		                  case 'A':
    		                  case 'E':
    		                  case 'I':
    		                  case 'O':
    		                  case 'U': strcognome = strcognome + document.MioForm.Cognome.value.charAt(i);
    		                 }
    		          }
    		       
    		       if (strcognome.length < 3) 
    		         {
    		          for (i=strcognome.length; i<=3; i++) 
    		             { strcognome = strcognome + 'X'; }
    		         }
    		      }
    		   
    		   strcognome = strcognome.substring(0,3);
    		 //------------------------------------------------------------ 
    		
    		
    		var strnome
    		strnome=""
    		  // processa il nome
    		  //----------------------------------------------------------------
    		 
    		    for (i=0; i<document.MioForm.Nome.value.length; i++) 
    		       {
    		        switch (document.MioForm.Nome.value.charAt(i)) 
    		              {
    		               case 'A':
    		               case 'E':
    		               case 'I':
    		               case 'O':
    		               case 'U': break;
    		               default:
    		 				if((document.MioForm.Nome.value.charAt(i)<='Z')&& (document.MioForm.Nome.value.charAt(i)>'A')) {
    		                  strnome = strnome + document.MioForm.Nome.value.charAt(i);  }
    		              }
    		       }
    		     
    		    if (strnome.length > 3) 
    		      {
    		        strnome = strnome.substring(0,1) + strnome.substring(2,4); 
    		      } 
    		    else {
    		          if (strnome.length < 3) 
    		            {
    		             for (i=0; i<document.MioForm.Nome.value.length; i++) 
    		                {
    		                  switch (document.MioForm.Nome.value.charAt(i)) 
    		                        {
    		                         case 'A':
    		                         case 'E':
    		                         case 'I':
    		                         case 'O':
    		                         case 'U': strnome = strnome + document.MioForm.Nome.value.charAt(i);
    		                        }
    		                }
    		             
    		            if (strnome.length < 3) 
    		               {
    		                for (i=strnome.length; i<=3; i++) 
    		                   {strnome = strnome + 'X';}
    		               }
    		           }
    		          strnome = strnome.substring(0,3);
    		        }
    		       
    		var strnc
    		strnc=strcognome+strnome  ;       
    		
    		     
    		 //--------------------------------------- Fine processa nome
    		
    		
    		
    		
    			var strCod_Fisc
    			strCod_Fisc = Cod_Fisc
    			var somma = 0
    			var chrcontrollo = ' '
    			var mycod = " "
    			mycod = strCod_Fisc
    			for (i=0; i<15; i++) 
    		       {
    		        if (((i+1) % 2) != 0) //caratteri dispari
    		          {
    		           switch (mycod.charAt(i)) 
    		                 {
    		                  case '0':
    		                  case 'A':{ somma += 1; break;}
    		                  case '1':
    		                  case 'B':{ somma += 0; break;}
    		                  case '2':
    		                  case 'C':{ somma += 5; break;}
    		                  case '3':
    		                  case 'D':{ somma += 7; break;}
    		                  case '4':
    		                  case 'E':{ somma += 9; break;}
    		                  case '5':
    		                  case 'F':{ somma += 13; break;}
    		                  case '6':
    		                  case 'G':{ somma += 15; break;}
    		                  case '7':
    		                  case 'H':{ somma += 17; break;}
    		                  case '8':
    		                  case 'I':{ somma += 19; break;}
    		                  case '9':
    		                  case 'J':{ somma += 21; break;}
    		                  case 'K':{ somma += 2; break;}
    		                  case 'L':{ somma += 4; break;}
    		                  case 'M':{ somma += 18; break;}
    		                  case 'N':{ somma += 20; break;}
    		                  case 'O':{ somma += 11; break;}
    		                  case 'P':{ somma += 3; break;}
    		                  case 'Q':{ somma += 6; break;}
    		                  case 'R':{ somma += 8; break;}
    		                  case 'S':{ somma += 12; break;}
    		                  case 'T':{ somma += 14; break;}
    		                  case 'U':{ somma += 16; break;}
    		                  case 'V':{ somma += 10; break;}
    		                  case 'W':{ somma += 22; break;}
    		                  case 'X':{ somma += 25; break;}
    		                  case 'Y':{ somma += 24; break;}
    		                  case 'Z':{ somma += 23; break;}
    		                 }
    		          } 
    		        else //caratteri pari
    		            {
    		              switch (mycod.charAt(i)) 
    		                 {
    		                  case '0':
    		                  case 'A':{ somma += 0; break;}
    		                  case '1':
    		                  case 'B':{ somma += 1; break;}
    		                  case '2':
    		                  case 'C':{ somma += 2; break;}
    		                  case '3':
    		                  case 'D':{ somma += 3; break;}
    		                  case '4':
    		                  case 'E':{ somma += 4; break;}
    		                  case '5':
    		                  case 'F':{ somma += 5; break;}
    		                  case '6':
    		                  case 'G':{ somma += 6; break;}
    		                  case '7':
    		                  case 'H':{ somma += 7; break;}
    		                  case '8':
    		                  case 'I':{ somma += 8; break;}
    		                  case '9':
    		                  case 'J':{ somma += 9; break;}
    		                  case 'K':{ somma += 10; break;}
    		                  case 'L':{ somma += 11; break;}
    		                  case 'M':{ somma += 12; break;}
    		                  case 'N':{ somma += 13; break;}
    		                  case 'O':{ somma += 14; break;}
    		                  case 'P':{ somma += 15; break;}
    		                  case 'Q':{ somma += 16; break;}
    		                  case 'R':{ somma += 17; break;}
    		                  case 'S':{ somma += 18; break;}
    		                  case 'T':{ somma += 19; break;}
    		                  case 'U':{ somma += 20; break;}
    		                  case 'V':{ somma += 21; break;}
    		                  case 'W':{ somma += 22; break;}
    		                  case 'X':{ somma += 23; break;}
    		                  case 'Y':{ somma += 24; break;}
    		                  case 'Z':{ somma += 25; break;}
    		                 }
    		            }
    		    }
    		  
    		   somma %= 26;
    		   switch (somma) 
    		         {
    		          case 0: {chrcontrollo='A'; break;}
    		          case 1: {chrcontrollo='B'; break;}
    		          case 2: {chrcontrollo='C'; break;}
    		          case 3: {chrcontrollo='D'; break;}
    		          case 4: {chrcontrollo='E'; break;}
    		          case 5: {chrcontrollo='F'; break;}
    		          case 6: {chrcontrollo='G'; break;}
    		          case 7: {chrcontrollo='H'; break;}
    		          case 8: {chrcontrollo='I'; break;}
    		          case 9: {chrcontrollo='J'; break;}
    		          case 10: {chrcontrollo='K'; break;}
    		          case 11: {chrcontrollo='L'; break;}
    		          case 12: {chrcontrollo='M'; break;}
    		          case 13: {chrcontrollo='N'; break;}
    		          case 14: {chrcontrollo='O'; break;}
    		          case 15: {chrcontrollo='P'; break;}
    		          case 16: {chrcontrollo='Q'; break;}
    		          case 17: {chrcontrollo='R'; break;}
    		          case 18: {chrcontrollo='S'; break;}
    		          case 19: {chrcontrollo='T'; break;}
    		          case 20: {chrcontrollo='U'; break;}
    		          case 21: {chrcontrollo='V'; break;}
    		          case 22: {chrcontrollo='W'; break;}
    		          case 23: {chrcontrollo='X'; break;}
    		          case 24: {chrcontrollo='Y'; break;}
    		          case 25: {chrcontrollo='Z'; break;}
    		         }
    		
    		 //--------------------------------------------
    		
    		if (chrcontrollo == mycod.charAt(15)&&(Cod_Fisc.substring(0,6)==strnc))
    		{
    			
    			return true;
    		} 
    		else 
    		{
    		
    			alert("Codice Fiscale non valido");
    		//	Cod_Fisc.focus();			
    			return false;
    		}
    }
    La funzione la chiamo da qui:

    codice:
    <td>
    <input type="text" name="CodFisc" maxlength=16 value="" onBlur="if (this.value.length!=0 || this.value!=''){Check_Cod_Fiscale(this.value); return true}">
    </td>
    L'errore che mi salta fuori è "previsto oggetto".
    Sapete aiutarmi a capire perchè?

    Domandina (da completo newbie del JS):
    il messaggio di errore mi specifica un numero di riga ed un carattere, cosa che (penso) dovrebbe aiutarmi a risolvere più facilmente i problemi. Come vengono calcolate, però, le righe?
    Cioè, si conta solo il codice client-side (penso di sì)? Si considerano solo le righe scritte o anche quelle che contengono solo spazi vuoti? Ho provato ad andare alla riga specificata, ma non c'ho trovato niente di strano...

    Grazie in anticipo a tutti!

    EDIT:
    Il controllo del codice fiscale lo eseguo solo sul nome e sul cognome perchè solo questi dati ho a disposizione... sempre meglio che non controllarlo affatto...
    Sono fermamente convinto che sia possibile fare ogni cosa. Tutto sta a capire come.

  2. #2
    Uppino...
    Sono fermamente convinto che sia possibile fare ogni cosa. Tutto sta a capire come.

  3. #3
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    La funzione si chiama Check_Cod_Fisc e tu invece richiami Check_Cod_Fiscale

    Inoltre hai dato lo stesso nome del parametro della funzione al campo del form : CodFisc devono essere univoci

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  4. #4
    Originariamente inviato da br1
    La funzione si chiama Check_Cod_Fisc e tu invece richiami Check_Cod_Fiscale
    Azz...
    Denghiu

    Originariamente inviato da br1
    Inoltre hai dato lo stesso nome del parametro della funzione al campo del form : CodFisc devono essere univoci

    ciao
    No, CodFisc è solo il nome del campo, il parametro è Cod_Fisc...
    Ovviamente cambiando il nome la funzione viene eseguita senza problemi, anche se non pare funzionare a dovere (non riconosce come valido il mio codice fiscale... mah).

    Per favore, puoi anche rispondermi alla domanda sul messaggio d'errore?
    Mi potrebbe essere molto utile per avitare di rompere sempre le scatole qui
    Sono fermamente convinto che sia possibile fare ogni cosa. Tutto sta a capire come.

  5. #5
    Fatto qualche modifica, ma ottengo un errore differente da prima:

    'undefined' è nullo o non è un oggetto

    La funzione è adesso questa:

    codice:
    function Check_Cod_Fiscale(Cod_Fisc)
    {
    strcognome=""
    
      // Processa il cognome
      //----------------------------------------------------------------
        for (i=0; i<document.MioForm.Cognome.value.length; i++) 
            {
    		switch (document.MioForm.Cognome.value.charAt(i)) 
                    {
                      case 'A':
                      case 'E':
                      case 'I':
                      case 'O':
                      case 'U': break;            
                      default : 
                      if((document.MioForm.Cognome.value.charAt(i)<='Z')&& (document.MioForm.Cognome.value.charAt(i)>'A')) {
                       strcognome = strcognome + document.MioForm.Cognome.value.charAt(i); }
                    }
            }
        if (strcognome.length < 3) 
          {
           for (i=0; i<document.MioForm.Cognome.value.length; i++) 
              {
               switch (document.MioForm.Cognome.value.charAt(i)) 
                     {
                      case 'A':
                      case 'E':
                      case 'I':
                      case 'O':
                      case 'U': strcognome = strcognome + document.MioForm.Cognome.value.charAt(i);
                     }
              }
           if (strcognome.length < 3) 
             {
              for (i=strcognome.length; i<=3; i++) 
                 { strcognome = strcognome + 'X'; }
             }
          }
       
       strcognome = strcognome.substring(0,3);
     //------------------------------------------------------------ 
    //alert(strcognome);
    
    strnome=""
      // processa il nome
      //----------------------------------------------------------------
        for (i=0; i<document.MioForm.Nome.value.length; i++) 
           {
            switch (document.MioForm.Nome.value.charAt(i)) 
                  {
                   case 'A':
                   case 'E':
                   case 'I':
                   case 'O':
                   case 'U': break;
                   default:
     				if((document.MioForm.Nome.value.charAt(i)<='Z')&& (document.MioForm.Nome.value.charAt(i)>'A')) {
                      strnome = strnome + document.MioForm.Nome.value.charAt(i);  }
                  }
           }
        if (strnome.length > 3) 
          {
            strnome = strnome.substring(0,1) + strnome.substring(2,4); 
          } 
        else {
              if (strnome.length < 3) 
                {
                 for (i=0; i<document.MioForm.Nome.value.length; i++) 
                    {
                      switch (document.MioForm.Nome.value.charAt(i)) 
                            {
                             case 'A':
                             case 'E':
                             case 'I':
                             case 'O':
                             case 'U': strnome = strnome + document.MioForm.Nome.value.charAt(i);
                            }
                    }
                if (strnome.length < 3) 
                   {
                    for (i=strnome.length; i<=3; i++) 
                       {strnome = strnome + 'X';}
                   }
               }
              strnome = strnome.substring(0,3);
            }
           //alert(strnome);
    strnc=strcognome+strnome  ;       
    
         
     //--------------------------------------- Fine processa nome
    
    
    
    
    strCod_Fisc = Cod_Fisc.value
    	var somma = 0
    	var chrcontrollo = ' '
    	var mycod = " "
    	mycod = strCod_Fisc
    	for (i=0; i<15; i++) 
           {
            if (((i+1) % 2) != 0) //caratteri dispari
              {
               switch (mycod.charAt(i)) 
                     {
                      case '0':
                      case 'A':{ somma += 1; break;}
                      case '1':
                      case 'B':{ somma += 0; break;}
                      case '2':
                      case 'C':{ somma += 5; break;}
                      case '3':
                      case 'D':{ somma += 7; break;}
                      case '4':
                      case 'E':{ somma += 9; break;}
                      case '5':
                      case 'F':{ somma += 13; break;}
                      case '6':
                      case 'G':{ somma += 15; break;}
                      case '7':
                      case 'H':{ somma += 17; break;}
                      case '8':
                      case 'I':{ somma += 19; break;}
                      case '9':
                      case 'J':{ somma += 21; break;}
                      case 'K':{ somma += 2; break;}
                      case 'L':{ somma += 4; break;}
                      case 'M':{ somma += 18; break;}
                      case 'N':{ somma += 20; break;}
                      case 'O':{ somma += 11; break;}
                      case 'P':{ somma += 3; break;}
                      case 'Q':{ somma += 6; break;}
                      case 'R':{ somma += 8; break;}
                      case 'S':{ somma += 12; break;}
                      case 'T':{ somma += 14; break;}
                      case 'U':{ somma += 16; break;}
                      case 'V':{ somma += 10; break;}
                      case 'W':{ somma += 22; break;}
                      case 'X':{ somma += 25; break;}
                      case 'Y':{ somma += 24; break;}
                      case 'Z':{ somma += 23; break;}
                     }
              } 
            else //caratteri pari
                {
                  switch (mycod.charAt(i)) 
                     {
                      case '0':
                      case 'A':{ somma += 0; break;}
                      case '1':
                      case 'B':{ somma += 1; break;}
                      case '2':
                      case 'C':{ somma += 2; break;}
                      case '3':
                      case 'D':{ somma += 3; break;}
                      case '4':
                      case 'E':{ somma += 4; break;}
                      case '5':
                      case 'F':{ somma += 5; break;}
                      case '6':
                      case 'G':{ somma += 6; break;}
                      case '7':
                      case 'H':{ somma += 7; break;}
                      case '8':
                      case 'I':{ somma += 8; break;}
                      case '9':
                      case 'J':{ somma += 9; break;}
                      case 'K':{ somma += 10; break;}
                      case 'L':{ somma += 11; break;}
                      case 'M':{ somma += 12; break;}
                      case 'N':{ somma += 13; break;}
                      case 'O':{ somma += 14; break;}
                      case 'P':{ somma += 15; break;}
                      case 'Q':{ somma += 16; break;}
                      case 'R':{ somma += 17; break;}
                      case 'S':{ somma += 18; break;}
                      case 'T':{ somma += 19; break;}
                      case 'U':{ somma += 20; break;}
                      case 'V':{ somma += 21; break;}
                      case 'W':{ somma += 22; break;}
                      case 'X':{ somma += 23; break;}
                      case 'Y':{ somma += 24; break;}
                      case 'Z':{ somma += 25; break;}
                     }
                }
        }
       somma %= 26;
       //alert("somma--->"+somma);
       switch (somma) 
             {
              case 0: {chrcontrollo='A'; break;}
              case 1: {chrcontrollo='B'; break;}
              case 2: {chrcontrollo='C'; break;}
              case 3: {chrcontrollo='D'; break;}
              case 4: {chrcontrollo='E'; break;}
              case 5: {chrcontrollo='F'; break;}
              case 6: {chrcontrollo='G'; break;}
              case 7: {chrcontrollo='H'; break;}
              case 8: {chrcontrollo='I'; break;}
              case 9: {chrcontrollo='J'; break;}
              case 10: {chrcontrollo='K'; break;}
              case 11: {chrcontrollo='L'; break;}
              case 12: {chrcontrollo='M'; break;}
              case 13: {chrcontrollo='N'; break;}
              case 14: {chrcontrollo='O'; break;}
              case 15: {chrcontrollo='P'; break;}
              case 16: {chrcontrollo='Q'; break;}
              case 17: {chrcontrollo='R'; break;}
              case 18: {chrcontrollo='S'; break;}
              case 19: {chrcontrollo='T'; break;}
              case 20: {chrcontrollo='U'; break;}
              case 21: {chrcontrollo='V'; break;}
              case 22: {chrcontrollo='W'; break;}
              case 23: {chrcontrollo='X'; break;}
              case 24: {chrcontrollo='Y'; break;}
              case 25: {chrcontrollo='Z'; break;}
             }
    
     //--------------------------------------------
    
    		if (chrcontrollo == mycod.charAt(15)&&(Cod_Fisc.substring(0,6)==strnc)){
    			
    			return true;
    		} else {
    		
    			alert("Codice Fiscale non valido");
    		//	Cod_Fisc.focus();			
    			return false;
    		}
    }
    Viene, come prima, chiamata così:

    codice:
    <td>
    <input type="text" name="CodFisc" maxlength=16 value="" onBlur="if (this.value.length!=0 || this.value!=''){Check_Cod_Fiscale(this.value); return true}">
    </td>
    Cosa c'è che non va?

    Grazie in anticipo
    Sono fermamente convinto che sia possibile fare ogni cosa. Tutto sta a capire come.

  6. #6
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    una domanda,
    ma come fai a controllare l'esattezza del codice fiscale senza avere il codice regionale del comune di nascita?

  7. #7
    Originariamente inviato da kluster
    una domanda,
    ma come fai a controllare l'esattezza del codice fiscale senza avere il codice regionale del comune di nascita?
    Leggere sopra, controllo il codice fiscale con i soli dati a mia disposizione, cioè nome e cognome.
    Meglio di niente, no?
    Sono fermamente convinto che sia possibile fare ogni cosa. Tutto sta a capire come.

  8. #8
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    dai un occhiata a questa discussione e vedi tu quale ti sembra il + consono
    http://forum.html.it/forum/showthrea...hreadid=461388

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ho trovato l'errore (forse).

    Alla funzione passi una stringa - la chiamata e`:
    Check_Cod_Fiscale(this.value)
    mentre all'interno della funzione la usi come oggetto, almeno in un caso:
    strCod_Fisc = Cod_Fisc.value

    Vedi di controllare l'uso che fai del parametro passato.

    ---

    Un commento sulla domanda di kluster.
    Il CF e` una stringa che intrinsecamente validabile: infatti l'ultimo carattere e` un controllo di parita` (come veniva chiamato anni fa) e consiste in una somma pesata di tutti gli altri caratteri.
    Per cui se c'e` un errore la somma non si trova e il codce non viene validato.

    Per il controllo formale, basta quindi una somma, del tipo che viene eseguita in questo script.

    --

    Un commento sullo script.
    Si puo` realizzare in modo molto piu` compatto, senza tutti quegli switch - usando invece dei vettori ad indice alfanumerico.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  10. #10
    Originariamente inviato da Mich_
    Ho trovato l'errore (forse).

    Alla funzione passi una stringa - la chiamata e`:
    Check_Cod_Fiscale(this.value)
    mentre all'interno della funzione la usi come oggetto, almeno in un caso:
    strCod_Fisc = Cod_Fisc.value

    Vedi di controllare l'uso che fai del parametro passato.
    Grazie infinite, l'errore stava proprio lì


    Originariamente inviato da Mich_
    ---

    Un commento sulla domanda di kluster.
    Il CF e` una stringa che intrinsecamente validabile: infatti l'ultimo carattere e` un controllo di parita` (come veniva chiamato anni fa) e consiste in una somma pesata di tutti gli altri caratteri.
    Per cui se c'e` un errore la somma non si trova e il codce non viene validato.

    Per il controllo formale, basta quindi una somma, del tipo che viene eseguita in questo script.
    Per un controllo formale, ma senza il controllo sul nome e cognome potrei inserire un codice fiscale valido qualsiasi (anche non appartenente alla persona che mi ha dato nome e cognome) e l'applicazione mi consentirebbe di procedere tranquillamente.
    Il carattere di controllo è il controllo sulla validità intrinseca, gli altri caratteri possono essere verificati comparandoli ciascuno con altri dati (nome, cognome, data di nascita, comune nascita).

    Originariamente inviato da Mich_
    --

    Un commento sullo script.
    Si puo` realizzare in modo molto piu` compatto, senza tutti quegli switch - usando invece dei vettori ad indice alfanumerico.
    Ehm... grazie del consiglio, ma sono un niubbo completo... che diamine sono i vettori ad indice alfanumerico? :master:
    Roba tipo gli array? O è roba che si mangia?
    Se mi sai dare qualche consiglio su come migliorarlo sarò ben lieto di farlo!

    EDIT: Qualcuno sa rispondermi all'altra domanda che avevo posto?
    Ovvero: la riga ed il numero del carattere che mi vengono indicati dal messaggio d'errore JS del browser come sono calcolati? Si considerano o no le righe vuote? Si considera o no il codice lato server (credo di no)? Tutte le volte che provo ad andare a cercare l'errore dove il messaggio me lo segnala ci trovo:
    a) niente (riga vuota)
    b) un carattere che è decisamente al suo posto
    c) un pezzo di codice html

    EDIT2:
    Lo script non genera più l'errore, ma continua a non riconoscere come valido il mio codice fiscale...
    Sono fermamente convinto che sia possibile fare ogni cosa. Tutto sta a capire come.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.