Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Codice Fiscale

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    63

    Codice Fiscale

    Mi è stato detto che nel caso un cui io abbia un nome o un cognome di sole due lettere il calcolo del codice fiscale presenta le due lettere e il carattere X come terza.
    Lo script di controllo codice fiscale / partita iva che io utilizzo però quando si trova davaneti ad un codice fiscale di questo tipo "BOxRFL07A01A944U" me lo scarta dicendo:
    "Il codice fiscale non è corretto: il codice di controllo non corrisponde".
    Voi avete maggiori info?
    Grazie in anticipo.

  2. #2
    si, è confermato anche da wikipedia

    posta il codice che usi, magari basta qualche modifica banale per sistemarlo!
    « Se nella prima mezz'ora non capisci chi è il pollo, allora il pollo sei tu. » [Thomas "Amarillo Slim" Preston, campione del mondo di poker]

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    63
    Ecco il codicee grazie)


    function ControllaCF($cf)
    {
    if( $cf == '' ) return '';
    if( strlen($cf) != 16 )
    return "La lunghezza del codice fiscale non è
    "
    ."corretta: il codice fiscale dovrebbe essere lungo
    "
    ."esattamente 16 caratteri.";
    $cf = strtoupper($cf);
    if( ! mb_ereg("^[A-Z0-9]+$", $cf) ){
    return "Il codice fiscale contiene dei caratteri non validi:
    "
    ."i soli caratteri validi sono le lettere e le cifre.
    ";
    }
    $s = 0;
    for( $i = 1; $i <= 13; $i += 2 ){
    $c = $cf[$i];
    if( '0' <= $c && $c <= '9' )
    $s += ord($c) - ord('0');
    else
    $s += ord($c) - ord('A');
    }
    for( $i = 0; $i <= 14; $i += 2 ){
    $c = $cf[$i];
    switch( $c ){
    case '0': $s += 1; break;
    case '1': $s += 0; break;
    case '2': $s += 5; break;
    case '3': $s += 7; break;
    case '4': $s += 9; break;
    case '5': $s += 13; break;
    case '6': $s += 15; break;
    case '7': $s += 17; break;
    case '8': $s += 19; break;
    case '9': $s += 21; break;
    case 'A': $s += 1; break;
    case 'B': $s += 0; break;
    case 'C': $s += 5; break;
    case 'D': $s += 7; break;
    case 'E': $s += 9; break;
    case 'F': $s += 13; break;
    case 'G': $s += 15; break;
    case 'H': $s += 17; break;
    case 'I': $s += 19; break;
    case 'J': $s += 21; break;
    case 'K': $s += 2; break;
    case 'L': $s += 4; break;
    case 'M': $s += 18; break;
    case 'N': $s += 20; break;
    case 'O': $s += 11; break;
    case 'P': $s += 3; break;
    case 'Q': $s += 6; break;
    case 'R': $s += 8; break;
    case 'S': $s += 12; break;
    case 'T': $s += 14; break;
    case 'U': $s += 16; break;
    case 'V': $s += 10; break;
    case 'W': $s += 22; break;
    case 'X': $s += 25; break;
    case 'Y': $s += 24; break;
    case 'Z': $s += 23; break;
    }
    }
    if( chr($s%26 + ord('A')) != $cf[15] )
    return "Il codice fiscale non &egrave; corretto:
    "
    ."il codice di controllo non corrisponde.
    ";
    return "";
    }


    function ControllaPIVA($pi)
    {
    if( $pi == '' ) return '';
    if( strlen($pi) != 11 )
    return "La lunghezza della partita IVA non &egrave;
    "
    ."corretta: la partita IVA dovrebbe essere lunga
    "
    ."esattamente 11 caratteri.\n";
    if( ! mb_ereg("^[0-9]+$", $pi) )
    return "La partita IVA contiene dei caratteri non ammessi:
    "
    ."la partita IVA dovrebbe contenere solo cifre.
    ";
    $s = 0;
    for( $i = 0; $i <= 9; $i += 2 )
    $s += ord($pi[$i]) - ord('0');
    for( $i = 1; $i <= 9; $i += 2 ){
    $c = 2*( ord($pi[$i]) - ord('0') );
    if( $c > 9 ) $c = $c - 9;
    $s += $c;
    }
    if( ( 10 - $s%10 )%10 != ord($pi[10]) - ord('0') )
    return "La partita IVA non &egrave; valida:
    "
    ."il codice di controllo non corrisponde.
    ";
    return '';
    }


    function precontrolla($cfisc){
    if (strlen($cfisc) == 16){
    return ControllaCF($cfisc);
    }
    elseif (strlen($cfisc) == 11){
    return ControllaPIVA($cfisc);
    }
    else{
    return "Il Codice Fiscale/Partita Iva introdotto non è valido:
    "
    ." - un codice fiscale deve essere lungo 16 caratteri;
    "
    ." - una partita IVA deve essere lunga 11 caratteri.
    ";

    }

    }

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120

    Re: Codice Fiscale

    Originariamente inviato da raffa76
    "BOxRFL07A01A944U"
    perché la x è minuscola?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    63
    ho creato questo codice fiscale dal sito http://www.codicefiscale.com/
    ho notato che quando metto le due lettere nel cognome mi mette la x minuscola quando le metto nel nome mette la X maiuscola non sò se significa qualcosa.

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Secondo me è un errore del sito. Cambia la minuscola con la maiuscola

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    63
    L'errore lo da lo stesso

  8. #8
    il sito codicefiscale.com calcola erratamente i codici fiscali corti

    cambiare la X non basta perché andrebbe ricalcolato pure il codice di controllo motivo per il quale il codice fiscale continua a risultare errato

    qui ti posto un altro pezzo di codice per il controllo del codice fiscale, semplificato ed un pò ottimizzato

    Codice PHP:
    // Verifica se ha già inizializzato i valori corrispondenti ai caratteri
    if (isset($fiscalCodeCharacterValues) === false)
    {
        
    // Inizializza l'array
        
    $fiscalCodeCharacterValues = array('0' => 1'1' => 0'2' => 5'3' => 7,
            
    '4' => 9'5' => 13'6' => 15'7' => 17'8' => 19'9' => 21'A' => 1,
                
    'B' => 0'C' => 5'D' => 7'E' => 9'F' => 13'G' => 15'H' => 17,
                    
    'I' => 19'J' => 21'K' =>  2'L' => 4'M' => 18'N' => 20,
                        
    'O' => 11'P' => 3'Q' => 6'R' => 8'S' => 12'T' => 14,
                            
    'U' => 16'V' => 10'W' => 22'X' => 25'Y' => 24,
                                
    'Z' => 23);
    }

    // Rende il valore passato tutto in maiuscolo
    $value strtoupper($value);

    // Inizializza il valore di controllo
    $checkValue 0;

    // Inizia il calcolo del valore di controllo sui numeri dispari
    for($index 1$index <= 13$index += 2)
    {
        
    // Acquisisce il caratteri dispari
        
    $char ord($value[$index]);
        
        
    // Confronta il valore
        
    if (48 <= $char && $char <= 57)
        {
            
    $checkValue += $char 48;
        }
        else
        {
            
    $checkValue += $char 65;
        }
    }

    // Continua il calcolo del valore di controllo sui numeri pari
    for($index 0$index <= 14$index += 2)
    {
        
    // Aggiunge i valore per il codice di controllo
        
    $checkValue += $fiscalCodeCharacterValues[$value[$index]];
    }

    // Esegue gli ultimi calcoli sul valore di controllo
    $checkValue = ($checkValue 26) + 65;

    // Confronta il valore
    if ($checkValue != ord($value[15]))
    {
        
    // Errore
    }

    // Tutto ok 
    la variabile $fiscalCodeCharacterValues la faccio inizializzare solo se necessaria perché controllando anche la partita iva potrebbe presentarsi il caso in cui la partita iva contenga il codice fiscale con il risultato che verrebbe inizializzata due volte

    NOTA1: controllare la validità del codice fiscale può essere utile all'utente per dare un minimo di feedback ma, nella pratica, è inutile perché non è possibile verificare i casi di omonimia che per quanto rari possano essere ci sono e fanno danni

    NOTA2: la partita iva potrebbe anche essere nel formato internazionale ovvero non composta solo dal numero quindi scartare tutte le p.ive che hanno una lunghezza diversa da 11 è errato ... se è 13 è pure corretta, basta eliminare i primi due caratteri dal controllo (per le partite ive italiane ovviamente)

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    63
    Come lo integro al mio codice?

  10. #10
    E' abbastanza semplice da fare, ci vogliono letteralmente pochi secondi!

    Basta che scrivi una funzione che prende come parametro il codice fiscale e restituisca true se l'operazione riesce e false se l'operazione non riesce.

    Nello specifico il parametro della funzione lo devi chiamare $value (ad es. nell'attuale funzione ControlloCF su chiama $cf) e poi dove ci sono i commenti // Errore e // Tutto ok devi mettere, rispettivamente, il return false ed il return true, perché nel primo caso hai un errore mentre nel secondo l'operazione riesce

    Mi sono scordato a postarti l'espressione regolare che faceva i controlli generali!

    rimetto il codice qui
    Codice PHP:
    if (preg_match('/^([A-Z]{6})([0-9]{2})([A-Z])([0-9]{2})([A-Z])([0-9]{3})([A-Z])$/i'$value) > 0)
    {
        
    // Verifica se ha già inizializzato i valori corrispondenti ai caratteri 
        
    if (isset($fiscalCodeCharacterValues) === false
        { 
            
    // Inizializza l'array 
            
    $fiscalCodeCharacterValues = array('0' => 1'1' => 0'2' => 5'3' => 7
                
    '4' => 9'5' => 13'6' => 15'7' => 17'8' => 19'9' => 21'A' => 1
                    
    'B' => 0'C' => 5'D' => 7'E' => 9'F' => 13'G' => 15'H' => 17
                        
    'I' => 19'J' => 21'K' =>  2'L' => 4'M' => 18'N' => 20
                            
    'O' => 11'P' => 3'Q' => 6'R' => 8'S' => 12'T' => 14
                                
    'U' => 16'V' => 10'W' => 22'X' => 25'Y' => 24
                                    
    'Z' => 23); 
        } 

        
    // Rende il valore passato tutto in maiuscolo 
        
    $value strtoupper($value); 

        
    // Inizializza il valore di controllo 
        
    $checkValue 0

        
    // Inizia il calcolo del valore di controllo sui numeri dispari 
        
    for($index 1$index <= 13$index += 2
        { 
            
    // Acquisisce il caratteri dispari 
            
    $char ord($value[$index]); 
             
            
    // Confronta il valore 
            
    if (48 <= $char && $char <= 57
            { 
                
    $checkValue += $char 48
            } 
            else 
            { 
                
    $checkValue += $char 65
            } 
        } 

        
    // Continua il calcolo del valore di controllo sui numeri pari 
        
    for($index 0$index <= 14$index += 2
        { 
            
    // Aggiunge i valore per il codice di controllo 
            
    $checkValue += $fiscalCodeCharacterValues[$value[$index]]; 
        } 

        
    // Esegue gli ultimi calcoli sul valore di controllo 
        
    $checkValue = ($checkValue 26) + 65

        
    // Confronta il valore 
        
    if ($checkValue != ord($value[15])) 
        { 
            
    // Errore 
        


        
    // Tutto ok


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.