Ragazzi ho uno script per calcolo del codice fiscale, funziona per tutte le città , tranne napoli....

Non capisco perchè, il codice mi sembra esatto, vi posto il codice e vi ringrazio in anticipo per le risposte:
codice:
<script >var CFisc={}


CFisc.tavola_mesi=['A','B','C','D','E','H','L','M','P','R','S','T']


CFisc.tavola_omocodie=['L','M','N','P','Q','R','S','T','U','V']


CFisc.tavola_carattere_di_controllo_valore_caratteri_dispari={
  0:1,  1:0,  2:5,  3:7,  4:9,  5:13, 6:15, 7:17, 8:19,
  9:21, A:1,  B:0,  C:5,  D:7,  E:9,  F:13, G:15, H:17,
  I:19, J: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
  }


CFisc.tavola_carattere_di_controllo_valore_caratteri_pari={
  0:0,  1:1,   2:2,  3:3,   4:4,  5:5,  6:6,  7:7,  8:8,
  9:9,  A:0,   B:1,  C:2,   D:3,  E:4,  F:5,  G:6,  H:7,
  I:8,  J: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
  }


CFisc.tavola_carattere_di_controllo="ABCDEFGHIJKLMNOPQRSTUVWXYZ"


CFisc.calcola_carattere_di_controllo=function(codice_fiscale){
  var i,val=0
  for(i=0;i<15;i++){
    var c=codice_fiscale[i]
    if(i%2)
      val+=this.tavola_carattere_di_controllo_valore_caratteri_pari[c]
    else
      val+=this.tavola_carattere_di_controllo_valore_caratteri_dispari[c]
  }
  val=val%26
  return this.tavola_carattere_di_controllo.charAt(val)
}


CFisc.affronta_omocodia=function(codice_fiscale,numero_omocodia)
{
  // non funziona
  var cifre_disponibili=[14,13,12,10,9,7,6]
  var cifre_da_cambiare=[]
  while(numero_omocodia>0 && cifre_disponibili.length){
    var i=numero_omocodia%cifre_disponibili.length
    numero_omocodia=Math.floor(numero_omocodia/cifre_disponibili.length)
    cifre_da_cambiare.push(cifre_disponibili.splice(i-1,1)[0])
  }
}


CFisc.ottieni_consonanti=function(str)
{
  return str.replace(/[^BCDFGHJKLMNPQRSTVWXYZ]/gi,'')
}


CFisc.ottieni_vocali=function(str)
{
  return str.replace(/[^AEIOU]/gi,'')
}


CFisc.calcola_codice_cognome=function(cognome)
{
  var codice_cognome=this.ottieni_consonanti(cognome)
  codice_cognome+=this.ottieni_vocali(cognome)
  codice_cognome+='XXX'
  codice_cognome=codice_cognome.substr(0,3)
  return codice_cognome.toUpperCase()
}


CFisc.calcola_codice_nome=function(nome)
{
  var codice_nome=this.ottieni_consonanti(nome)
  if(codice_nome.length>=4){
    codice_nome=
      codice_nome.charAt(0)+
      codice_nome.charAt(2)+
      codice_nome.charAt(3)
  }else{
    codice_nome+=this.ottieni_vocali(nome)
    codice_nome+='XXX'
    codice_nome=codice_nome.substr(0,3)
  }
  return codice_nome.toUpperCase()
}


CFisc.calcola_codice_data=function(gg,mm,aa,sesso)
{
  var d=new Date()
  d.setYear(aa);
  d.setMonth(mm-1);
  d.setDate(gg);
  var anno="0"+d.getFullYear()
  anno=anno.substr(anno.length-2,2);
  var mese=this.tavola_mesi[d.getMonth()]
  var giorno=d.getDate()
  if(sesso.toUpperCase()=='F') giorno+=40;
  giorno="0"+giorno
  giorno=giorno.substr(giorno.length-2,2);
  return ""+anno+mese+giorno
}


CFisc.trova_comune=function(pattern_comune)
{
  var codice,comune,ret=[]
  var quoted=pattern_comune.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
  var re=new RegExp(quoted,'i')
  for(codice in this.codici_catastali)
  {
    comune=this.codici_catastali[codice]
    if(comune.match(re)) ret.push([comune,codice])
  }
  return ret
}


CFisc.calcola_codice_comune=function(pattern_comune){
  if(pattern_comune.match(/^[A-Z]\d\d\d$/i)) return pattern_comune;
  return this.trova_comune(pattern_comune)[0][1];
}


CFisc.calcola_codice=function(nome,cognome,sesso,giorno,mese,anno,luogo)
{
  var codice=
    this.calcola_codice_cognome(cognome)+
    this.calcola_codice_nome(nome)+
    this.calcola_codice_data(giorno,mese,anno,sesso)+
    this.calcola_codice_comune(luogo)


  codice+=this.calcola_carattere_di_controllo(codice)


  return codice
}


</script>
<script ><!--
CFisc.codici_catastali={
"A001":"ABANO TERME (PD)",
"A004":"ABBADIA CERRETO (LO)",
"A005":"ABBADIA LARIANA (LC)",
"A006":"ABBADIA SAN SALVATORE (SI)",
"A007":"ABBASANTA (OR)",
"A008":"ABBATEGGIO (PE)",
"A010":"ABBIATEGRASSO (MI)",
"A012":"ABETONE (PT)",
"A013":"ABRIOLA (PZ)",
etc
"F838":"NANTO (VI)",
"F839":"NAPOLI (NA)",
"F840":"NARBOLIA (OR)",
"F841":"NARCAO (CA)",
"F842":"NARDO' (LE)",
"F843":"NARDODIPACE (VV)",
"F844":"NARNI (TR)",

M203":"ZUNGOLI (AV)",
"M204":"ZUNGRI (VV)",
}
--></script>
<script>
function formsubmit(form)
{
  var sesso=form.sesso[0].checked?'M':'F'
  var data=form.data.value
  data=data.match(/^\s*(\d+).(\d+).(\d+)/)
  var codice=CFisc.calcola_codice(
    form.nome.value,
    form.cognome.value,
    sesso,
    data[1],data[2],data[3],
    form.luogo.value
    )
  form.codice.value=codice
}
</script>