Visualizzazione risultati 1 fino 10 di 10

Discussione: [PHP] Calcolo del codice fiscale

  1. #1
    Guest

    Predefinito [PHP] Calcolo del codice fiscale

    Ciao a tutti!

    So che esistono script già fatti per questo, ma volevo provare a fare uno script che calcoli il codice fiscale.

    Fino a adesso sono arrivato fino a qui:
    Codice PHP:
    <?php

    $cognome
    =""; // Cognome
    $nome=""; // Nome
    $anno=""; // Anno composto da 4 numeri
    $mese=""; // Mese
    $giorno=""; // Giorno
    $sesso=""; // Sesso
    $codcomune=""; // Codice comune

    $consonanti=array("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z");
    $mesi=array(1=>"A","B","C","D","E","F","G","H","I","J","K","L");
    $lettere=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
    $dispari=array("0"=>1,"a"=>1,"b"=>0,"1"=>0,"c"=>5,"2"=>5,"d"=>7,"3"=>7,"e"=>9,"4"=>9,"f"=>13,"5"=>13,"g"=>15,"6"=>15,"h"=>17,"7"=>17,"i"=>19,"8"=>19,"j"=>21,"9"=>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);
    $pari=array("0"=>0,"a"=>0,"b"=>1,"1"=>1,"c"=>2,"2"=>2,"d"=>3,"3"=>3,"e"=>4,"4"=>4,"f"=>5,"5"=>5,"g"=>6,"6"=>6,"h"=>7,"7"=>7,"i"=>8,"8"=>8,"j"=>9,"9"=>9,"k"=>10,"l"=>11,"m"=>12,"n"=>13,"o"=>14,"p"=>15,"q"=>16,"r"=>17,"s"=>18,"t"=>19,"u"=>20,"v"=>21,"w"=>22,"x"=>23,"y"=>24,"z"=>25);

    // Prime 3 consonanti del cognome
    for($i=0;$i<strlen($cognome);$i++){
    if(
    in_array($cognome[$i],$consonanti) && $e<4){
    $codice.=$cognome[$i];
    $e++;
    }
    }

    // Prime 3 consonanti del nome
    for($i=0;$i<strlen($nome);$i++){
    if(
    in_array($nome[$i],$consonanti) && $f<4){
    $codice.=$nome[$i];
    $f++;
    }
    }

    // Ultime 2 cifre dell'anno di nascita
    $codice.=$anno[2].$anno[3];

    // Mese di nascita
    $codice.=$mesi[$mese];

    // Giorno di nascita. Per le femmine 40 giorni in più.
    if($sesso=="m"){
    $codice.=$giorno;
    }else if(
    $sesso=="f"){
    $codice.=$giorno+40;
    }

    // Codice del comune di nascita
    $codice.=$codcomune;

    // Codice di controllo. Per i pari $pari e per i dispari $dispari
    for($i=0;$i<strlen($codice);$i++){
    if(
    $i%2==1){
    $pre.=$dispari[$codice[$i]];
    }else{
    $pre.=$pari[$codice[$i]];
    }
    }

    // Somma i valori del codice di controllo
    for($i=0;$i<strlen($pre);$i++){
    $pre2=$pre2+$pre[$i];
    }

    // Al resto della divisione del codice corrisponde una lettera
    $codice.=$lettere[($pre2%26)-1];

    // Visualizza il codice fiscale
    echo strtoupper($codice);

    ?>
    con alcuni nomi il codice di controllo viene giusto, con altri no.

    Come riferimento ho utilizzato la pagina http://gratis.pietrelcinanet.com/cod...ale/codice.htm.

    Ma come mai non funziona?? Eppure sembra sia tutto giusto, ho anche controllato di non aver copiato male i vari codicini dalle tabelle..

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,266

    Predefinito

    credo che le regole di creazione siano un filo più complicate, potresti esserti dimenticato qualche caso particolare.

    Disclaimer:
    L'unico [codice fiscale] valido è quello rilasciato dall'Agenzia delle Entrate. Nessun soggetto esterno quindi è autorizzato a produrre programmi per il calcolo o la stampa del codice.
    (vedi sito dell'agenzia delle entrate)
    Questo perché il codice è solitamente prodotto con quell'algoritmo, ma in caso di omocodia (due persone con lo stesso codice) ne viene assegnato uno diverso (vedi link sopra). Se non hai accesso ai dati dell'anagrafe, non sarai mai sicuro al 100% dell'esattezza del tuo risultato - e la gente potrebbe avere grane per aver usato un codice fiscale corretto secondo l'algoritmo, ma non assegnato a loro.

  3. #3
    Guest

    Predefinito

    Grazie per la risposta e per il sito segnalato.

    Naturalmente io non volevo utilizzare quello script per scopi strani, era solo una specie di passatempo che però è diventato un rompicapo...

  4. #4
    Guest

    Predefinito

    Gli algoritmi che calcolano il nome e il cognome sono errati... ... mica il codice fiscale prende le prime tre consonanti...

    Ad esempio. Io mi chiamo Domenico. Nel codice fiscale risulta DNC, ovvero la 1°, la 3° e la 4° consonante.

    Sta scritto nel sito che hai postato...

  5. #5
    Guest

    Predefinito

    E' Vero! Avevo saltato quel punto.. pensavo fosse uguale al cognome!

    Grazie per aver trovato l'errore!!

  6. #6
    Guest

    Predefinito

    a me il nome lo ha messo giusto: marcus -> mcs
    p.s.: anche il codice fiscale è giusto :)) nonostante sia nato all'estero... complimentoni!!!

    posso mettere il codice sul mio sito?

    se si mandami una mail

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito Pseudo-off-topic ?

    [4 demenziale] Come scritto nelle regole linkate sopra:
    - se il nome ha 4 o più consonanti, le tre cifre del nome sono 1^, 3^ e 4^ consonante
    - se il nome ha 3 consonanti, le tre cifre sono queste consonanti prese in ordine
    - se il nome ha meno di 3 consonanti, le tre cifre sono le consonanti seguite, in ordine, dalle vocali (Ada, per esempio, sarebbe codificato in DAA)
    - se il nome ha meno di 3 lettere, si seguono le regole sopra riempiendo i buchi con delle X (anche se non mi viene in mente proprio alcun nome di 2 lettere...)

    [4 allo] Ma davvero ti sei copiato tutti i "codici Fiore" (la penultima lettera e le ultime 3 cifre) da assegnare per ciascun comune e paese estero (8.105 comuni e 191 stati esteri, mi pare siano quelli riconosciuti)...? Che lavoraccio...

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    No.. non ho copiato tutti i codici.. Ho solo inserito quello del mio comune di nascita per provare, poi pensavo di utilizzare uno di quei database già fatti (ci sono molti script in javascript che contengono l'elenco dei comuni)..

    Ciao!

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    [4 demenziale] Come scritto nelle regole linkate sopra:
    - se il nome ha 4 o più consonanti, le tre cifre del nome sono 1^, 3^ e 4^ consonante
    - se il nome ha 3 consonanti, le tre cifre sono queste consonanti prese in ordine
    - se il nome ha meno di 3 consonanti, le tre cifre sono le consonanti seguite, in ordine, dalle vocali (Ada, per esempio, sarebbe codificato in DAA)
    - se il nome ha meno di 3 lettere, si seguono le regole sopra riempiendo i buchi con delle X (anche se non mi viene in mente proprio alcun nome di 2 lettere...)

    Statemi bene...
    infatti il mio lo fa giusto... lo dicevo perchè a chi si chiama domenico aveva dato errore mentre a me lo dava giusto... :))) tutto qui.

    rinnovo l'invito: se ti va metto il tuo script online (ovviamente ricordando che è fatto da te :))

    saluti

  10. #10
    Guest

    Predefinito

    Già dimenticavo.. Mettilo pure dove vuoi!

    Più che altro adesso cercherò di migliorarlo e adattarlo ai nomi e cognomi con meno di tre lettere e tutti i casi particolari.

    Grazie ancora!!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •