Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Errore nella validazione codice fiscale

    Ciao a tutti torno a chiedere il vostro aiuto.
    ho un problema con questo script, in generale funziona tutto ci sono solo due problemi.
    La funzione ControllaCF dovvrebbe accettare solo caratteri maiuscoli, invece accetta sia minuscoli che maiuscoli.
    Mentre mi sono accorto che se si inseriscono 16 caratteri non rispettando l'ordine " 6 lettere 2 numeri 1 lettera 2 numeri 1 lettera 3 numeri 1 lettera ma li inserisco a caso il codice fiscale viene validato, stessa cosa se inserisco 16 caratteri tutti uguali oppure numeri viene validato comunque e procede all'inserimento nel DB, come posso risolvere questi problema ? dov'è l'errore?
    io non sono molto pratico e sono arrivato a realizzare questo script dopo mille peripezie e consigli.
    Giusto perchè poi mi verrà chiesto , il campo ControllaCF(mail.value); viene chiamato mail ma solo perchè è un db di prova non mio e quindi lo lascio così poi lo sistemerò!!!

    Grazie a tutti per il vostro aiuto


    codice:
    //verifica codice fiscale
    
    function ControllaCF(cf)
    {
    	var validi, i, s, set1, set2, setpari, setdisp;
    	if( cf == '' )  return "Errore: compilare il campo CODICE FISCALE";
    	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";
    			
    	return "OK";
    }
    
    // verifica che tutti i campi form siano popolati
    function controllo(){
    with(document.InsUtenteZS) {
    if(realzs.value=="") {
    alert("Errore: compilare il campo USERNAME");
    realzs.focus();
    return false;
    }
    if(PWUtente.value=="") {
    alert("Errore: compilare il campo PASSWORD");
    PWUtente.focus();
    return false;
    }
    if(nome.value=="") {
    alert("Errore: compilare il campo NOME");
    nome.focus();
    return false;
    }
    if(cognome.value=="") {
    alert("Errore: compilare il campo COGNOME");
    cognome.focus();
    return false;
    }
    if(luogo.value=="") {
    alert("Errore: compilare il campo LUOGO DI NASCITA");
    luogo.focus();
    return false;
    }
    if(ident.value=="") {
    alert("Errore: compilare il campo CARTA D'IDENTITA");
    ident.focus();
    return false;
    }
    returnCode = ControllaCF(mail.value);
    if(returnCode != "OK"){
    alert(returnCode);	
    mail.focus();	
    return false;
    }
    }
    alert("Controllo effettuato con successo. Il modulo sarà inviato.");
    return true;
    }

  2. #2
    Caro Nazario, a prima vista la funzione ha diversi errori!
    Per il fatto che accetta anche i caratteri minuscoli, ciò avviene perché sei tu a dirgli di trasformare il codice tutto in maiuscolo col metodo toUpperCase, all'inizio della funzione!
    Il controllo delle singole sezioni del codice, poi, lo vedo molto contorto!
    Basterebbe usare una espressione regolare e risolverti il problema in maniera semplice.

    function controllaCF(cf) {
    var myexp = new RegExp("^[a-zA-Z]{6}[0-9]{2}[abcdehlmprstABCDEHLMPRST]{1}[0-9]{2}([a-zA-Z]{1}[0-9]{3})[a-zA-Z]{1}$");
    if (!myexp.test(cf))
    {
    alert("Il codice inserito non è valido!");
    }
    }

    Ciao!

  3. #3
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    @forisco70 da quanto mi risultava non è possibile verificare (con una regular) il codice fiscale perché l'ultimo numero (chiave di controllo) è una somma/calcolo degli altri 15 caratteri.

    http://forum.html.it/forum/showthrea...47#post3678147
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  4. #4
    Hai ragione, Andrea! E sì che ne ho fatti di software per il calcolo del codice fiscale!
    La mia risposta risolve mezzo problema, in effetti!
    Grazie

  5. #5
    Ciao, in effetti avevo letto delle regular ma essendo io un autodidatta faccio un bel po di fatica.
    Ho comunque trovato un post su di un forum che trattava appunto le regular per la validazione del codice fiscale, ho fatto 2 modifiche stupide ( solo due return false )e le mie belle prove e devo dire che funziona.
    Ovvio che non posso avere la certezza dei dati inseriti, ma è pur sempre un controllo in più!
    Al momento funziona tutto e a quanto pare anche il calcolo dell'ultimo numero, sto facendo delle prove con dei codici reali e provando a cambiare alcune cifre a caso in effetti la funzione mi avvisa dell'errore del CF.
    Inoltre ho notato che funziona anche l'obbligo di inserire il codice con l'ordine ccccccnncnncnnnc
    quindi sembra risolto il problema che avevo in precedenza.
    Ad ora l'ho testato con circa 200 utenti che mi hanno dato un feedback positivo sui risultati ottenuti, errore in caso di codice errato e validazione in caso di codice corretto.
    Rimane ancora una questione che è quella del carattere.
    Se non ho capito male la stringa " var cf = cfins.toUpperCase();" dovrebbe accettare l'inserimento di soli caratteri Maiuscoli ma è probabile che non abbia capito bene.
    Posto comunque il tutto magari può servire.
    Per ora mi ritengo soddisfatto.

    Grazie a tutti per l'aiuto

    codice:
    function controllaCF(cfins){
    var cf = cfins.toUpperCase();
    var cfReg = /^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/;
    if (!cfReg.test(cf))
    return "Errore: CODICE FISCALE non valido";
    var set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
    var 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 "Errore: CODICE FISCALE non valido";
    return true;
    }
    
    // funzione che verifica che tutti i campi form siano popolati
    function controllo(){
    with(document.InsUtenteZS) {
    if(realzs.value=="") {
    alert("Errore: compilare il campo USERNAME");
    realzs.focus();
    return false;
    }
    if(PWUtente.value=="") {
    alert("Errore: compilare il campo PASSWORD");
    PWUtente.focus();
    return false;
    }
    if(nome.value=="") {
    alert("Errore: compilare il campo NOME");
    nome.focus();
    return false;
    }
    if(cognome.value=="") {
    alert("Errore: compilare il campo COGNOME");
    cognome.focus();
    return false;
    }
    if(luogo.value=="") {
    alert("Errore: compilare il campo LUOGO DI NASCITA");
    luogo.focus();
    return false;
    }
    if(ident.value=="") {
    alert("Errore: compilare il campo CARTA D'IDENTITA");
    ident.focus();
    return false;
    }
    
    returnCode = controllaCF(mail.value);
    if(returnCode != true){
    alert(returnCode);	
    mail.focus();	
    return false;
    }
    }
    alert("Tutti i dati sono stati inseriti correttamente.");
    return true;

  6. #6
    La stringa var cf = cfins.toUpperCase(); trasforma tutti i caratteri della stringa cfins in maiuscoli.
    Se hai cfins = 'aAbbcDFsw', facendo var cf = cfins.toUpperCase avrai cf = 'AABBCDFSW'.
    Spero sia chiaro! Ciao

  7. #7
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    592

    Re: Errore nella validazione codice fiscale

    A parte la routine che usi tu che non l'ho analizzata...però se ti interessa io uso questa routine per la validazione....la puoi modificare per il tuo script
    ....
    function SalvaScheda() {
    var pattern = /^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/;
    var txtCodiceFiscale = document.getElementById("codicefiscale");
    if (txtCodiceFiscale.value.search(pattern) == -1) {
    // per aggiornare lo stesso forzare la routine con confirm....
    var truthBeTold = window.confirm("Il valore inserito non è un codice fiscale!Fare clic su OK per continuare. Fare clic su Annulla per interrompere.");
    if (truthBeTold) {
    // routine di lancio aggiornamento
    Aggiorna();
    } else codicefiscale.focus();
    } else
    { Aggiorna();
    }
    }
    .....
    Ciao
    Vic53

    Originariamente inviato da nazario79
    Ciao a tutti torno a chiedere il vostro aiuto.
    ho un problema con questo script, in generale funziona tutto ci sono solo due problemi.
    La funzione ControllaCF dovvrebbe accettare solo caratteri maiuscoli, invece accetta sia minuscoli che maiuscoli.
    Mentre mi sono accorto che se si inseriscono 16 caratteri non rispettando l'ordine " 6 lettere 2 numeri 1 lettera 2 numeri 1 lettera 3 numeri 1 lettera ma li inserisco a caso il codice fiscale viene validato, stessa cosa se inserisco 16 caratteri tutti uguali oppure numeri viene validato comunque e procede all'inserimento nel DB, come posso risolvere questi problema ? dov'è l'errore?
    io non sono molto pratico e sono arrivato a realizzare questo script dopo mille peripezie e consigli.
    Giusto perchè poi mi verrà chiesto , il campo ControllaCF(mail.value); viene chiamato mail ma solo perchè è un db di prova non mio e quindi lo lascio così poi lo sistemerò!!!

    Grazie a tutti per il vostro aiuto


    codice:
    //verifica codice fiscale
    
    function ControllaCF(cf)
    {
    	var validi, i, s, set1, set2, setpari, setdisp;
    	if( cf == '' )  return "Errore: compilare il campo CODICE FISCALE";
    	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";
    			
    	return "OK";
    }
    
    // verifica che tutti i campi form siano popolati
    function controllo(){
    with(document.InsUtenteZS) {
    if(realzs.value=="") {
    alert("Errore: compilare il campo USERNAME");
    realzs.focus();
    return false;
    }
    if(PWUtente.value=="") {
    alert("Errore: compilare il campo PASSWORD");
    PWUtente.focus();
    return false;
    }
    if(nome.value=="") {
    alert("Errore: compilare il campo NOME");
    nome.focus();
    return false;
    }
    if(cognome.value=="") {
    alert("Errore: compilare il campo COGNOME");
    cognome.focus();
    return false;
    }
    if(luogo.value=="") {
    alert("Errore: compilare il campo LUOGO DI NASCITA");
    luogo.focus();
    return false;
    }
    if(ident.value=="") {
    alert("Errore: compilare il campo CARTA D'IDENTITA");
    ident.focus();
    return false;
    }
    returnCode = ControllaCF(mail.value);
    if(returnCode != "OK"){
    alert(returnCode);	
    mail.focus();	
    return false;
    }
    }
    alert("Controllo effettuato con successo. Il modulo sarà inviato.");
    return true;
    }
    Vic53

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.