Newsgroup: it.comp.lang.javascript
Titolo: codice fiscale

Qualcuno conosce le "regole" per calcolare il codice fiscale (o meglio ha
uno script pronto)?
Grazie.

Le funzioni, sono possibili, credo di avere qualcosa in Vb..
ma quello che "appesantisce" le pagina sono i Codici
Catastali dei Comuni,
che bisognerebbe per altro avere aggiornati....
se ti serve dovrei avere un elenco.........anche se non
completo!!
--
Bye
Ro<*¿*>berto

 wrote in message
7hpoa0$leg$1...@diesel.cu.mi.it...


 Io ne ho una versione clipper, ma la trovo un po'
inadattabile...
..ho delle funzioni in Vb, anche per controllare la P.iva se
ti interessa te le mando,
non è difficile trasformarle in Jscript, con un po' di tempo
a disposizione..


...


P.iva:
Public Function chk_PIVA(piva As String)
    Dim i As Integer, t_i As Integer, t1 As Integer
    Dim t2 As Integer, t3 As String, t5 As Integer, cin As
String
    t_i = 0
    For i = 1 To 10
        t1 = CInt(Mid(piva, i, 1))
        If i Mod 2 > 0 Then
            t_i = t_i + t1
        Else
            t2 = t1 * 2
            If t2 < 10 Then
                t_i = t_i + t2
            Else
                t3 = CStr(t2)
                t_i = t_i + CInt(Mid(t3, 1, 1)) +
CInt(Mid(t3, 2, 1))
            End If
        End If
    Next
    If t_i / 10 <> t_i \ 10 Then
        t5 = (t_i \ 10 + 1) * 10 - t_i
    Else
        t5 = 0
    End If
    cin = Mid(CStr(t5), 1, 1)
    If cin = Mid(piva, 11, 1) Then
        chkPI = True
    Else
        chkPI = False
    End If
End Function
---------------
il cf. č un poco piů lungo... se mai te lo mando!!
--
Bye
Ro<*ż*>berto

Grazie, se mi mandi anche per codfis ti ringrazio doppiamente.

Grazie, Vb mi piace già di più. Se non ti secca posta pure tutto.
Ciao.


 Grazie, Vb mi piace già di più. Se non ti secca posta pure tutto.
Ehm... se non ti dispiace mi aggiungo alla lista di quelli in attesa...
Grazie ;-)
--
ciao
gelty
--
Visita 
http://www.sifor.it
Elimina *toglimi* per le risposte

.... se qualcuno lo trasforma in JS però poi me lo
passa VERO?!?!? :)
..anche una info da chiedere:
-qualcuno sa dove posso trovare
un sorgente per programma gestionale di impresa fatto in Vb
con archivi in mdb??
--
Bye
Ro<*¿*>berto
Public Function makeNome(nomePass As String) As String
    Dim noSpaces As String, vocali As String, consonanti As
String
    Dim nowLook As String * 1, totVocali As Integer, totCons
As Integer
    noSpaces = eliminaSpazi(nomePass)
    vocali = ""
    consonanti = ""
    For i = 1 To Len(noSpaces)
        nowLook = Mid(noSpaces, i, 1)
        Select Case nowLook
        Case "A", "E", "I", "O", "U"
            vocali = vocali & nowLook
            totVocali = totVocali + 1
        Case Else
            consonanti = consonanti & nowLook
            totCons = totCons + 1
        End Select
    Next
    Select Case totCons
    Case 0
        Select Case totVocali
        Case 0
            makeNome = ""
        Case 1
            makeNome = vocali + "XX"
        Case 2
            makeNome = vocali + "X"
        Case Else
            makeNome = Mid(vocali, 1, 3)
        End Select
    Case 1
        Select Case totVocali
        Case 0
            makeNome = consonanti + "XX"
        Case 1
            makeNome = consonanti + vocali + "X"
        Case Else
            makeNome = consonanti + Mid(vocali, 1, 2)
        End Select
    Case 2
        Select Case totVocali
        Case 0
            makeNome = consonanti + "X"
        Case 1
            makeNome = consonanti + vocali
        Case Else
            makeNome = consonanti + Mid(vocali, 1, 1)
        End Select
    Case 3
        makeNome = consonanti
    Case Else
        makeNome = Mid(consonanti, 1, 1) & Mid(consonanti,
3, 1) & Mid(consonanti, 4, 1)
    End Select
End Function
Public Function makeCognome(nomePass As String) As String
    Dim noSpaces As String, vocali As String, consonanti As
String
    Dim nowLook As String * 1, totVocali As Integer, totCons
As Integer
    noSpaces = eliminaSpazi(nomePass)
    vocali = ""
    consonanti = ""
    For i = 1 To Len(noSpaces)
        nowLook = Mid(noSpaces, i, 1)
        Select Case nowLook
        Case "A", "E", "I", "O", "U"
            vocali = vocali & nowLook
            totVocali = totVocali + 1
        Case Else
            consonanti = consonanti & nowLook
            totCons = totCons + 1
        End Select
    Next
    Select Case totCons
    Case 0
        Select Case totVocali
        Case 0
            makeCognome = ""
        Case 1
            makeCognome = vocali + "XX"
        Case 2
            makeCognome = vocali + "X"
        Case Else
            makeCognome = Mid(vocali, 1, 3)
        End Select
    Case 1
        Select Case totVocali
        Case 0
            makeCognome = consonanti + "XX"
        Case 1
            makeCognome = consonanti + vocali + "X"
        Case Else
            makeCognome = consonanti + Mid(vocali, 1, 2)
        End Select
    Case 2
        Select Case totVocali
        Case 0
            makeCognome = consonanti + "X"
        Case 1
            makeCognome = consonanti + vocali
        Case Else
            makeCognome = consonanti + Mid(vocali, 1, 1)
        End Select
    Case 3
        makeCognome = consonanti
    Case Else
        makeCognome = Mid(consonanti, 1, 3)
    End Select
End Function
Public Function makeData(dataPass As String, sexPass As
String) As String
    Dim giorno As Integer, mese As Integer, anno As Integer
    Dim codMese As String * 1
    giorno = CInt(Mid(dataPass, 1, 2))
    mese = CInt(Mid(dataPass, 4, 2))
    anno = CInt(Mid(dataPass, 7, 2))
    Select Case mese
    Case 1
        codMese = "A"
    Case 2
        codMese = "B"
    Case 3
        codMese = "C"
    Case 4
        codMese = "D"
    Case 5
        codMese = "E"
    Case 6
        codMese = "H"
    Case 7
        codMese = "L"
    Case 8
        codMese = "M"
    Case 9
        codMese = "P"
    Case 10
        codMese = "R"
    Case 11
        codMese = "S"
    Case 12
        codMese = "T"
    End Select
    If sexPass = "F" Then giorno = giorno + 40
    makeData = Format(anno, "00") & codMese & Format(giorno,
"00")
End Function

Grazie mille.
Propongo che il primo che trova il tempo di convertirlo in JS si impegni a
ripubblicarlo sul NG per Roberto e altri.
Ciao a tutti.


 ripubblicarlo sul NG per Roberto e altri.
....vediamo se qualcuno è un po' altruista, e oltre a
chiedere .......
offre anche!!!!!!!!
:)


 offre anche!!!!!!!!
PRONTI, mi sembra giusto che chi possa contribuisca.
Io mi sono occupato della semplice traduzione in JavaScript, quindi non
mi
prendo responsabilità sulla correttezza dell'algoritmo.
Unica nota che voglio fare è che non ho messo nessun controllo sulla
data, quindi se qualcuno è in possesso di qualche algoritmo in grado di
verificare la correttezza di una stringa come data ben venga,
diversamente si corre il rischio di non avere un codice fiscale
corretto.
Ecco il sorgente:
-----------8<---------------8<-----------------8<---------------
<script language="Javascript">
/* name è la stringa da abbreviare nel CF mentre surname è un boolean
che mi controlla
   se si tratta del nome o del cognome */
function abbrevation (name, surname) {
   /* Costruisco la stringa tutta unita ed in maiuscolo */
   var stringa_unita = (name.split(" ")).join("");
   stringa_unita = stringa_unita.toUpperCase();
   /* Separo le vocali dalle consonanti */
   var vocali = "";
   var consonanti = "";
   for (i=0; i < stringa_unita.length; i++){
      i_car = stringa_unita.charAt(i);
      if (i_car == "A" || i_car == "E" || i_car == "I" || i_car == "O"
|| i_car == "U")
         vocali += i_car;
      else
         consonanti += i_car;
   }
   /* Costruisco la stringa di 3 caratteri che farà parte del CF */
   var CF_str = "";
   switch (consonanti.length) {
      case 0: switch (vocali.length) {
                 case 0:  CF_str = "";
                          break;
                 case 1:  CF_str = vocali + "XX";
                          break;
                 case 2:  CF_str = vocali + "X";
                          break;
                 default: CF_str = vocali.substring(0,3);
                          break;
              }
              break;
      case 1: switch (vocali.length) {
                 case 0:  CF_str = consonanti + "XX";
                          break;
                 case 1:  CF_str = consonanti + vocali + "X";
                          break;
                 default: CF_str = consonanti + vocali.substring(0,2);
                          break;
              }
              break;
      case 2: switch (vocali.length) {
                 case 0:  CF_str = consonanti + "X";
                          break;
                 case 1:  CF_str = consonanti + vocali;
                          break;
                 default: CF_str = consonanti + vocali.substring(0,1);
                          break;
              }
              break;
      case 3: CF_str = consonanti;
              break;
      default: if (surname) CF_str = consonanti.substring(0,1) +
consonanti.substring(1,3);
               else CF_str = consonanti.substring(0,3);
   }
   return (CF_str);
}
function makeData (birthdate, sex) {
   var data = new Date(birthdate);
   var CF_data = "";
   /* Inserisco l'anno */
   if (data.getYear() < 10) CF_data = ("0" + data.getYear());
      else CF_data = data.getYear();
   /* Inserisco la lettera del mese secondo la codifica */
   switch (data.getMonth()) {
      case 0:  CF_data += "A";
               break;
      case 1:  CF_data += "B";
               break;
      case 2:  CF_data += "C";
               break;
      case 3:  CF_data += "C";
               break;
      case 4:  CF_data += "E";
               break;
      case 5:  CF_data += "H";
               break;
      case 6:  CF_data += "L";
               break;
      case 7:  CF_data += "M";
               break;
      case 8:  CF_data += "P";
               break;
      case 9:  CF_data += "R";
               break;
      case 10: CF_data += "S";
               break;
      case 11:  CF_data += "T";
               break;
   }
   /* Inserisco il giorno controllando il sesso */
   if (sex.toUpperCase() == "F") CF_data += eval(data.getDate() + 40);
   else if (data.getDate() < 10) CF_data += "0" + data.getDate();
        else CF_data += data.getDate();
   return CF_data;
}
/* Ritorna la stringa completa del codice fiscale
   NOTE: 1) non si riporta il CF completo visto che occorrerebbe
conoscere il codice
            del comune di nascita
         2) non si riporta l'ultima cifra di controllo non avendo a
disposizione tutti
            i dati necessari
         3) non viene fatto nessun controllo sulla data che si presume
in formato UTC */
function codice_fiscale (surname, name, sex, date_of_birth){
   return abbrevation(surname,true) + abbrevation(name,false) +
makeData(date_of_birth,sex);
}
</script>
-----------8<---------------8<-----------------8<---------------
-- 
        _
       //\
 Bye, //--\ndrea
(
http://www.geocities.com/SiliconValley/Peaks/9739
)

 Public Function chk_PIVA(piva As String)
[...]
Ho provato a trasformare anche questo in JavaScript, ma non mi convince
molto l'algoritmo. Se provi a guardare un poco se va bene oppure ho
scritto delle cavolate così possiamo dichiarare chiuso il thread (il CF
te l'ho già postato).
---------8<--------------8<--------------8<------------8<---------- 
function check_PIVA (PI) {
   var t_i = 0;
   for (i=0; i < 10; i++) {
      t1 = eval(PI.charAt(i));
      if ((i % 2) > 0) t_i += t1;
      else {
         t2 = t1 * 2;
         if (t2 < 10) t_i += t2;
         else t_i += eval((t2.toString()).charAt(0)) +
eval((t2.toString()).charAt(1))
      }
   }
   t5 = ((t_i % 10) != 0)?((Math.ceil(t_i / 10)) * 10 - t_i):0;
   if ((t5.toString()).charAt(0) == PI.charAt(10)) return true;
   else return false;
}
---------8<--------------8<--------------8<------------8<----------
