Quote Originariamente inviata da ElyCucciola Visualizza il messaggio
ho un dubbio questa funzione
codice:
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"+
            "eventualmente chiamare il cliente per conferma.\n";
    return "";
}
non � possibile tenerla come � modificandogli solo i return come la funzione della partita iva ?
A parte la funzione che hai scritto tu, io ti ho dato la mia funzione perch� l'ho testata su decine di migliaia di casi...
Ci sono altre cose che secondo me � meglio correggere
per esempio il costrutto che ti posto preso dal tuo codice...
codice:
SQL = "Select  partitaiva,codicefiscale,id From cli where codicefiscale='"&codfisc&"' " 
Set DB = Conn.Execute(SQL)

  'Session("id") = RS("id")
    
While DB.EOF 
Response.Redirect "nuovocli.asp?cdf="&codfisc&""

DB.MoveNext
      
    Wend
...
per me � sbagliato
il codice corretto sarebbe invece
[code]
SQL = "Select partitaiva,codicefiscale,id From cli where codicefiscale='"&codfisc&"' "
Set DB = Conn.Execute(SQL)
if DB.EOF then
Response.Redirect "nuovocli.asp?cdf="&codfisc&""
else
'...che fai se trovi il record cliente?
'
end if
'...
poi il fatto del return Falso alla funzione non risolve il problema del tuo codice...
Lo script che io ti ho rifatto impefdisce l'utente di inviare il modulo se uno o tutti e due i campi sono sbagliati
il tuo codice invece passa tranquillamente il controllo se sono giusti o sbagliati... perche lla chiamata che fai l'hai
ai controlli l'hai messa su due livelli di chiamata a funzione.
la funzione verifica deve essere una sola e dare un solo valore in risposta :input corretto o sbagliato. codi se sbagliato esci dalla funzione mentre se superi i due controlli prosegue al fondo del controllo e lancia la funzione che fa proseguire il programma.
Quindi quando esegui la funzione Controllo CF ti aspetti true o false per esmpio e se false dai il messaggio di errere ed esci con ret7urn posizionando il cursore sul campo come ti ho fatto io nella funzione che ti ho postato altrimenti prosegui su controlloPI e anche li fai la stessa cosa. Se il programma arriva oltre vuol dire che ha superato il test... e prosegue a inserire la scheda cliente....
Io cambierei il codice che hai fatto facendo una sola routine al posto si VerificaCF e VerificaPI...
Come ti ho suggerito naturalmente tu sei libera di scrivere codice come ti pare . Dal canto mio io scrivo codice da molti anni (diciamo pi� di trenta...) e ne vedo di tutti i colori...
Considera i miei suggerimenti e ragionaci su
un saluto