Caro Nazario, a prima vista la funzione ha diversi errori!
Per il fatto che accetta anche i caratteri minuscoli, ciò avviene perché sei tu a dirgli di trasformare il codice tutto in maiuscolo col metodo toUpperCase, all'inizio della funzione!
Il controllo delle singole sezioni del codice, poi, lo vedo molto contorto!
Basterebbe usare una espressione regolare e risolverti il problema in maniera semplice.
function controllaCF(cf) {
var myexp = new RegExp("^[a-zA-Z]{6}[0-9]{2}[abcdehlmprstABCDEHLMPRST]{1}[0-9]{2}([a-zA-Z]{1}[0-9]{3})[a-zA-Z]{1}$");
if (!myexp.test(cf))
{
alert("Il codice inserito non è valido!");
}
}
Ciao!