Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916

    controllo campo P.IVA modificato

    ciao a tutti!

    uso questo codice per controllare il corretto inserimento di una p.iva italiana.

    codice:
    function ControllaPIVA(pi)
    {
    	if( pi == '' )  return '';
    	if( pi.length != 11 )
    		return "La lunghezza della partita IVA non è\n" +
    			"corretta: la partita IVA dovrebbe essere lunga\n" +
    			"esattamente 11 caratteri.\n";
    	validi = "0123456789";
    	for( i = 0; i < 11; i++ ){
    		if( validi.indexOf( pi.charAt(i) ) == -1 )
    			return "La partita IVA contiene un carattere non valido `" +
    				pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n";
    	}
    	s = 0;
    	for( i = 0; i <= 9; i += 2 )
    		s += pi.charCodeAt(i) - '0'.charCodeAt(0);
    	for( i = 1; i <= 9; i += 2 ){
    		c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
    		if( c > 9 )  c = c - 9;
    		s += c;
    	}
    	if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) )
    		return "La partita IVA non è valida:\n" +
    			"il codice di controllo non corrisponde.\n";
    	return '';
    }
    funziona bene, solo che ora vorrei apportare una modifica ma non sono in grado.

    visto che all'estero cè il VAT che ha i primi 2 caratteri sotto forma di lettere, vorrei modificare lo script che accettasse anche i VAT...

    in sostanza mi basta che se ci sono 2 lettere ai primi posti e altri 9 numeri il controllo dia esito positivo...
    e se invece ci sono solo numeri mi faccia il controllo che cè già!

    qualcuno mi può aiutare?

    grazie!
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  2. #2
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    uppounpò!
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  3. #3
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    ri up!
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  4. #4
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    qualcuno riesce ad aiutarmi?
    in non so metterci le mani...


    grazie.
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  5. #5
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    mi spieghi a cosa serve questa parte dello script?

    codice:
    s = 0;
    	for( i = 0; i <= 9; i += 2 )
    		s += pi.charCodeAt(i) - '0'.charCodeAt(0);
    	for( i = 1; i <= 9; i += 2 ){
    		c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
    		if( c > 9 )  c = c - 9;
    		s += c;
    	}
    	if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) )
    		return "La partita IVA non è valida:\n" +
    			"il codice di controllo non corrisponde.\n";
    Sembra tu stia applicando l'algoritmo di Luhn alla partita IVA...
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  6. #6
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    Originariamente inviato da fcaldera
    mi spieghi a cosa serve questa parte dello script?

    codice:
    s = 0;
    	for( i = 0; i <= 9; i += 2 )
    		s += pi.charCodeAt(i) - '0'.charCodeAt(0);
    	for( i = 1; i <= 9; i += 2 ){
    		c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
    		if( c > 9 )  c = c - 9;
    		s += c;
    	}
    	if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) )
    		return "La partita IVA non è valida:\n" +
    			"il codice di controllo non corrisponde.\n";
    Sembra tu stia applicando l'algoritmo di Luhn alla partita IVA...
    sinceramente non lo so... lo script era così... purtroppo non sono così ferrato con questo linguaggio, qualcosa faccio ma solo script basilari...
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  7. #7
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    comunque ti basta aggiungere una espressione regolare

    codice:
    function ControllaPIVA(pi)
    {
            if (pi.match(/^\w{2}\d{9}$/i)) return true; 
     
    	if( pi == '' )  return '';
    	if( pi.length != 11 )
    		return "La lunghezza della partita IVA non è\n" +
    			"corretta: la partita IVA dovrebbe essere lunga\n" +
    			"esattamente 11 caratteri.\n";
    	validi = "0123456789";
    	for( i = 0; i < 11; i++ ){
    		if( validi.indexOf( pi.charAt(i) ) == -1 )
    			return "La partita IVA contiene un carattere non valido `" +
    				pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n";
    	}
    
    	s = 0;
    	for( i = 0; i <= 9; i += 2 )
    		s += pi.charCodeAt(i) - '0'.charCodeAt(0);
    	for( i = 1; i <= 9; i += 2 ){
    		c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
    		if( c > 9 )  c = c - 9;
    		s += c;
    	}
    	if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) )
    		return "La partita IVA non è valida:\n" +
    			"il codice di controllo non corrisponde.\n";
    	return '';
    }
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  8. #8
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    aspè...

    posto il codice intero perche così non mi funziona come intendo io...


    codice:
    <script language=JavaScript>
    <!--
    
    function ControllaCF(cf)
    {
    	var validi, i, s, set1, set2, setpari, setdisp;
    	if( cf == '' )  return '';
    	cf = cf.toUpperCase();
    	if( cf.length != 16 )
    		return "La lunghezza del codice fiscale non è\n"
    		+"corretta: il codice fiscale dovrebbe essere lungo\n"
    		+"esattamente 16 caratteri.\n";
    	validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    	for( i = 0; i < 16; i++ ){
    		if( validi.indexOf( cf.charAt(i) ) == -1 )
    			return "Il codice fiscale contiene un carattere non valido `" +
    				cf.charAt(i) +
    				"'.\nI caratteri validi sono le lettere e le cifre.\n";
    	}
    	set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    	set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
    	setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    	setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
    	s = 0;
    	for( i = 1; i <= 13; i += 2 )
    		s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
    	for( i = 0; i <= 14; i += 2 )
    		s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
    	if( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) )
    		return "Il codice fiscale non è corretto:\n"+
    			"il codice di controllo non corrisponde.\n";
    	return "";
    }
    
    
    function ControllaPIVA(pi)
    {
    	if( pi == '' )  return '';
    	if( pi.length != 11 )
    		return "La lunghezza della partita IVA non è\n" +
    			"corretta: la partita IVA dovrebbe essere lunga\n" +
    			"esattamente 11 caratteri.\n";
    	validi = "0123456789";
    	for( i = 0; i < 11; i++ ){
    		if( validi.indexOf( pi.charAt(i) ) == -1 )
    			return "La partita IVA contiene un carattere non valido `" +
    				pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n";
    	}
    	s = 0;
    	for( i = 0; i <= 9; i += 2 )
    		s += pi.charCodeAt(i) - '0'.charCodeAt(0);
    	for( i = 1; i <= 9; i += 2 ){
    		c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
    		if( c > 9 )  c = c - 9;
    		s += c;
    	}
    	if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) )
    		return "La partita IVA non è valida:\n" +
    			"il codice di controllo non corrisponde.\n";
    	return '';
    }
    
    
    function verifica()
    {
    	cod = document.shopper_new.piva.value;
    	document.shopper_new.piva.focus();
    
    	if( cod == '' )
    		err = "hai lasciato in bianco il campo!\n";
    	else if( cod.length == 16 )
    		err = ControllaCF(cod);
    	else if( cod.length == 11 )
    		err = ControllaPIVA(cod);
    	else
    		err = "Il codice introdotto non è valido:\n\n" +
    			"  - un codice fiscale deve essere lungo 16 caratteri;\n\n" +
    			"  - una partita IVA deve essere lunga 11 caratteri.\n";
    
    	if( err > '' )
    		{alert("VALORE ERRATO\n\n" + err + "\nCorreggi e riprova!"); return false;}
    }
    
    // -->
    </script>
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  9. #9
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    quello che devo fare io è che si accetti anche il contenuto del campo se i primi 2 caratteri sono lettere.
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  10. #10
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    altro problema, è che se la p.iva è straniera, ci sono 2 lettere tipo FR (per francia) e poi ci sono 11 numeri...



    qualche soluzione?
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.