Barracuda Blog


Web, Tecnologia e Mare
0

Generare una lista di anagrafiche random con codice fiscale

In un progetto di performance testing mi è capitata la necessità di avere a disposizione un grande numero di anagrafiche distinte (nell'ordine delle migliaia), con relativo codice fiscale. Queste anagrafiche dovevano essere su un file csv, che sarebbe stato utilizzato come input dai virtual user di Loadrunner per simulare uno scenario di inserimento anagrafica. Il tracciato del file csv era il seguente:

nome,cognome,stato di nascita,sesso,provincia di nascita,comune di nascita,data,codice fiscale

Per creare il file csv ho sviluppato uno script PHP, nel quale ho usato una delle tante classi che si trovano sul web per generare il codice fiscale. Nel mio caso ho utilizzato questa, disponibile su PHPclasses.org.

Di seguito il codice dello script:

require_once 'codicefiscale.class.php';


class CodiceFiscale extends CodiceFiscale_Abstract {
    
    private $_db;
    
    public function leggiCatastali($filename) {
        $this->_db = unserialize(file_get_contents($filename));
    }
    
    protected function _calcolaCatastale() {
        if (!$this->_db) {
            throw new CodiceFiscale_Exception('impossibile caricare il file dei catastali');
        }
        $comune    = strtoupper($this->comune);
        $provincia = strtoupper($this->provincia);
        if (!isset($this->_db[$provincia][$comune])) {
            $message = sprintf("codice catastale non trovato (provincia: %s, comune: %s)", $provincia, $comune);
            throw new CodiceFiscale_Exception($message);
        }
        return $this->_db[$provincia][$comune];
    }
}

function random_name( $length = 8 ) {
    $chars = "abcdefghijklmnopqrstuvwxyz";
    $name = substr( str_shuffle( $chars ), 0, $length );
    return $name;
}

//funzione di comodità per generare un array da passare alla classe
function componi($nome, $cognome, $data, $comune, $provincia, $sesso) {
    return [
       'nome'      => $nome,
       'cognome'   => $cognome,
       'data'      => $data,
       'comune'    => $comune,
       'provincia' => $provincia,
       'sesso'     => $sesso 
    ];
}

// istanzio la classe e carico il db dei catastali
$cf = new CodiceFiscale();
$cf->leggiCatastali('catastali.txt');
$dati = array();
$fp = fopen('elenco_vf.csv', 'w');
$pool_citta = array('roma', 'torino', 'milano', 'trieste');
$pool_province = array('roma' => 'rm', 'torino' => 'to', 'milano' => 'mi', 'trieste' => 'ts');

//Genero 4000 anagrafiche random con relativo codice fiscale
for($i=0;$i<4000;$i++)
{
    $int= rand(157762800,567990000);
    $nome = random_name();
    $cognome = random_name();
    if((rand(1,100)%2) == 0) 
        $sesso = "m";
    else $sesso = "f";
    $citta_temp = $pool_citta[rand(0,3)];
    $dati[] = componi($nome , $cognome, date("d-m-Y",$int), $citta_temp, $pool_province[$citta_temp], $sesso);
    
}

//Creo l'intestazione del file csv
$testata = array('nome','cognome','statoDiNascita','sesso','provinciaDiNascita','comuneDiNascita','data','cf','anagrafica');
fputcsv($fp,$testata);
//per ogni anagrafica scrivo una riga sul file csv
foreach($dati as $persona) {
    try {
        $cf->importa($persona);
        fputcsv($fp, array_map('strtoupper',array($persona['nome'], $persona['cognome'], 'Italia', $persona['sesso'], $persona['provincia'], $persona['comune'], date_format(date_create($persona['data']), 'Y-m-d'),$cf->calcola(), '')));
    } catch (CodiceFiscale_Exception $e) {
        print "Errore: ". $e->getMessage() . "\n";
        continue;
    }
}

fclose($fp);

Spero sia utile, perchè online si trovano solamente soluzioni per generare il singolo codice fiscale.

Categories: Web Development

Tags: csv, php, codice fiscale, anagrafica

Be the first to comment

Post a comment