Nella lezione precedente avevamo iniziato la stesura di una classe CPersona contenente anche il codice fiscale, che viene calcolato con i dati disponibili. In questa nuova lezione vedremo come estrapolare i caratteri, 3 dal nome e 3 dal cognome, che compongono i primi sei caratteri del codice fiscale. Se non lo avete fatto la volta scorsa vi suggerisco di leggervi questa mia pagina nella quale dico tutto sul codice fiscale. Implementiamo una funzione che restituisca i 3 caratteri dal nome ed i 3 caratteri dal cognome.
... private bool FindString(string strVal, char cVal) { foreach (char c in strVal) { if (c == cVal) return true; } return false; } private string ExtractChars(string strVal, bool bCognome) { string retValue = ""; string strVoc = "AaEeIiOoUu"; int numCon = 0; int numVoc = 0; for (int i = 0; i < strVal.Length; ++i) { if (!FindString(strVoc, strVal[i]) && strVal[i] != ' ') { retValue += strVal[i]; ++numCon; } if (numCon >= 3) { if (bCognome) { break; } else { for (int k = i + 1; k <= strVal.Length; ++k) { if (!FindString(strVoc, strVal[k]) && strVal[k] != ' ') { retValue += strVal[k]; string strTemp = retValue; retValue = strTemp.Substring(0, 1); retValue += strTemp.Substring(strTemp.Length - 2, 2); i = strVal.Length; break; } } } } } if (numCon < 3) { for (int i = 0; i < strVal.Length; ++i) { if (FindString(strVoc, strVal[i])) { retValue += strVal[i]; ++numVoc; } if ((numCon + numVoc) >= 3) break; } } if ((numCon + numVoc) < 3) { if ((numCon + numVoc) == 0) retValue = "***"; if ((numCon + numVoc) == 1) retValue = "***"; if ((numCon + numVoc) == 2) retValue += 'X'; } return retValue; } ...
Ho creato 2 metodi privati che ovviamente vanno inseriti nella nostra classe e penso siano abbastanza chiari, quindi studiate il codice riga per riga cercando di capire cosa ho fatto. Se qualcuno avesse in mente un altro procedimento o volesse cambiare qualcosa, potete farmelo sapere.
Se qualcuno avesse bisogno di maggiori informazioni o vuole richiedermi qualcosa può porre le sue domande nel forum dedicato a questo linguaggio.
<< Lezione Precedente – Inizio Corso – Indice Lezioni – Lezione Successiva >>
Ciao Giampaolo
Ti ringrazio per aver messo a disposizione questo codice che mi è stato molto utile.
Voglio però segnalarti un errore.
Nel calcolare il mio codice fiscale mi sono occorto che non veniva estratta correttamente la vocale nel caso di nomi con numero di consonanti inferiore a 3.
Ho corretto il codice in questo modo:
…
if (numCon < 3)
{
for (int i = 0; i = 3)
break;
}
}
…
Ora sembra funzionare correttamente.
Confermi?
Ciao
Luca
Il codice non è stato parsato correttamente.
Correggo:
…
if (numCon < 3)
{
…
if (FindString(strVoc, strVal[i])) // HO TOLTO IL ! (NOT)
…
}
…
Ciao
Luca
Ciao Luca, in effetti hai ragione, va tolta la negazione perché in assenza di consonanti vanno trovate le vocali, cosa che come era prima non poteva avvenire. Grazie.
di preciso i metdo ExtractChar che fa??
ps: il codice nn è aggiornato con le modifiche di luca giusto?
Estrae le tre consonanti o vocali dal nome o cognome.
Si il codice è stato corretto.
Ciao, per evitare tutta una serie di controlli molto difficili non puoi suddividere la stringa ricevuta in 2? Una stringa di sole consonanti ed una di sole vocali.
strVal = strVal.Replace(” “, “”).ToUpper();
string str1 = Regex.Replace(strVal, “[AEIOU]”, “”);
string str2 = Regex.Replace(strVal, “[^AEIOU]”, “”);
Poi dovrai solo preoccuparti di controllare la lunghezza delle varie stringhe!