Continuiamo questa serie di lezioni sul linguaggio C# dedicati alla creazione di una classe CPersona nella quale inseriremo anche il calcolo automatico del codice fiscale. Questa volta creeremo un metodo privato della classe per recuperare i cinque caratteri provenienti dalla data di nascita. Come tutti dovete sapere i primi 2 caratteri sono le ultime 2 cifre dell’anno, uno è corrispondente al mese e le ultime 2 sono il giorno di nascita, che nel caso delle donne è aumentato di 40 unità.
... private string GetCharData() { string retVal = m_dtDataNasc.Year.ToString(); retVal = retVal.Substring(2, 2); switch (m_dtDataNasc.Month) { case 1: retVal += 'A'; break; case 2: retVal += 'B'; break; case 3: retVal += 'C'; break; case 4: retVal += 'D'; break; case 5: retVal += 'E'; break; case 6: retVal += 'H'; break; case 7: retVal += 'L'; break; case 8: retVal += 'M'; break; case 9: retVal += 'P'; break; case 10: retVal += 'R'; break; case 11: retVal += 'S'; break; case 12: retVal += 'T'; break; } if (m_bSesso) { string strTemp = m_dtDataNasc.Day.ToString(); if (strTemp.Length <= 1) { retVal += "0"; retVal += strTemp; } else retVal += strTemp; } else retVal += (m_dtDataNasc.Day + 40).ToString(); return retVal; } ...
Il codice mi sembra abbastanza comprensibile, unica spiegazione da dare è nell’inserimento nel giorno di uno zero per quelle date prima del 10 in quanto il giorno proveniente dalla data per il C# è un numero e quando con la funzione ToString() vado a trasformarlo in caratteri giustamente toglie lo zero, per le donne questo problema non sussiste in quanto il giorno è sempre superiore a 40.
Come al solito vi invito a dialogare nel forum dedicato alla programmazione e ci vediamo la prossima lezione quando estrarremo il codice del comune.
<< Lezione Precedente – Inizio Corso – Indice Lezioni – Lezione Successiva >>
ciao!
mi interessa molto questo codice che hai fatto ma ho una domanda: da qui come e dove si capisce il sesso??
tu hai messo un bool ma da quanto ho capito il calcolo cambia a seconda se è M o F.
Ciao, il sesso interessa soltanto il giorno di nascita, che nelle donne è aumentato di 40, quindi per esempio se un uomo è nato il 4 di un mese, si mette 04, mentre per una donna si mette 44. Per fare il procedimento inverso, quindi trovare il sesso dal codice fiscale, basta verificare che quei due numeri siano superiori a 31, nel qual caso si tratta sicuramente di donna, altrimenti di uomo. Spero di esserti stato di aiuto.
si però quello che volevo capire è se nel codice è implementato questo particolare o no.
da quanto ho capito no quindi dovrei apportare delle modifiche giusto??
anche perchè ho fatto un test mettendo il nome di una ragazza qua e nella pagina php che invece ha la scelta del sesso e i risultati sono diversi.
suppongo quindi che qua nn venga preso in considerazione il sesso.
Come non viene preso in considerazione..
if (m_bSesso)
{
// Questo viene fatto se è uomo
string strTemp = m_dtDataNasc.Day.ToString();
if (strTemp.Length <= 1) // aggiungo uno zero davanti al numero se questo è uno soltanto
{
retVal += "0";
retVal += strTemp;
}
else
retVal += strTemp;
}
else // questo viene fatto se è donna
retVal += (m_dtDataNasc.Day + 40).ToString(); // aggiungo 40m se si tratta di donna
Come vedi c'è la differenziazione tra uomo e donna.
ah ok.
in sostanza true per i maschi, false per femmine.
quindi se è false viene considerato il calcolo con la donna.
ciao!
mi sto studiando il tuo codice.
lo trovo ottimo e ben scritto ma nn riesco bene a capire cosa fa questa riga:
retVal = retVal.Substring(2, 2);
conosco la funziona Substring, ma nn riesco a capire cosa prendi qua.
potresti spiegarmelo per favore??
Ciao Pino, nella funzione prendo i cinque caratteri dalla data di nascita e la variabile di tipo stringa <em>retVal</em> deve contenere questo valore che poi restituisco.
Nel caso specifico, prima prendo l’anno di nascita che mi viene dato in formato “XXXX” esempio “1985”, ma dato che nel codice fiscale ci vanno solo le ultime due cifre, qui prendo la sottostringa a cominciare dalla posizione 2 per 2 posizioni in avanti, quindi da “1985” avrò “85”. Tutto qua, un modo come un altro per risolvere un problema, ovviamente ci sono anche altri. A presto!
ah ok!!
è che sto cercando di fare una cosa del genere in java che però usa diversamente il metodo substring.
grazie!!
Ciao, ottimo script, ho 2 ottimizzazioni da consigliarti.
1) Per prendere i 2 caratteri dell’anno potresti scrivere:
string retVal = m_dtDataNasc.ToString(“yy”);
Così facendo eviti di utilizzare la substring e se la CultureInfo è correttamente impostata non avrai nessun problema con i vari formati data 😉
2) Per la lettera del mese potresti fare così invece:
retVal += (“ABCDEHLMPRST”[m_dtDataNasc.Month – 1]);
Ciao