<% ' By Atari (http://www.dadamax.net) - 10 Settembre 2003 Response.Buffer = True Response.Expires = 0 If Request.Form("isSubmit") = "true" Then ' Cognome CF_Cognome = "" Cognome = Replace(UCase(Request.Form("cf_cognome")), " ", "") Cognome = Replace(Replace(Replace(Cognome, """", ""), "'", ""), ".", "") Consonanti = "[b-d]|[f-h]|[j-n]|[p-t]|[v-z]" Vocali = "a|e|i|o|u" Set RE_Consonanti = New RegExp RE_Consonanti.Global = True RE_Consonanti.IgnoreCase = True RE_Consonanti.Pattern = Consonanti Set Matches = RE_Consonanti.Execute(Cognome) For Each Match in Matches CF_Cognome = CF_Cognome & Match.Value Next If Len(CF_Cognome) < 3 Then Set RE_Vocali = New RegExp RE_Vocali.Global = True RE_Vocali.IgnoreCase = True RE_Vocali.Pattern = Vocali Set Matches = RE_Vocali.Execute(Cognome) For Each Match in Matches CF_Cognome = CF_Cognome & Match.Value Next End If Set RE_Consonanti = Nothing Set RE_Vocali = Nothing If Len(CF_Cognome) < 3 Then CF_Cognome = CF_Cognome & String(3, "X") End If Codice_Fiscale = Left(CF_Cognome, 3) ' Nome (ris. 3 caratteri) CF_Nome = "" ' Pulisce il nome ricevuto [via spazi, apici, minuscole -> maiuscole] Nome = Replace(UCase(Request.Form("cf_nome")), " ", "") Nome = Replace(Replace(Replace(Nome, """", ""), "'", ""), ".", "") ' Cerca tutte le consonanti presenti nel nome ricevuto Set RE_Consonanti = New RegExp RE_Consonanti.Global = True RE_Consonanti.IgnoreCase = True RE_Consonanti.Pattern = Consonanti Set Matches = RE_Consonanti.Execute(Nome) For Each Match in Matches CF_Nome = CF_Nome & Match.Value Next ' Scarta la seconda consonante dal nome (se il nome possiede piu' di 3 consonanti) If Len(CF_Nome) > 3 Then CF_Nome = Left(CF_nome, 1) & Mid(CF_Nome, 3, 2) End If ' Se il nome ricevuto non possiede almeno tre consonanti, aggiunge alla stringa ' le vocali presenti If Len(CF_Nome) < 3 Then Set RE_Vocali = New RegExp RE_Vocali.Global = True RE_Vocali.IgnoreCase = True RE_Vocali.Pattern = Vocali Set Matches = RE_Vocali.Execute(Nome) For Each Match in Matches CF_Nome = CF_Nome & Match.Value Next End If Set RE_Consonanti = Nothing Set RE_Vocali = Nothing ' Per i nomi con meno di 3 caratteri, aggiungi una 'X' fino ad avere una stringa di 3 caratteri. ' Nello specifico vengono aggiunte sempre 3 'X', dato che alla fine il nome inserito nel codice ' fiscale viene troncato a 3 caratteri If Len(CF_Nome) < 3 Then CF_Nome = CF_Nome & String(3, "X") End If ' Concatena i primi 3 caratteri del nome codificato alla stringa del codice_fiscale Codice_Fiscale = Codice_Fiscale & Left(CF_Nome, 3) ' Anno Codice_Fiscale = Codice_Fiscale & Right(Request.Form("Anno"), 2) ' Mese Select Case Request.Form("mese") Case 1 Mese = "A" Case 2 Mese = "B" Case 3 Mese = "C" Case 4 Mese = "D" Case 5 Mese = "E" Case 6 Mese = "H" Case 7 Mese = "L" Case 8 Mese = "M" Case 9 Mese = "P" Case 10 Mese = "R" Case 11 Mese = "S" Case 12 Mese = "T" End Select Codice_Fiscale = Codice_Fiscale & Mese ' Giorno CF_Giorno = Request.Form("giorno") If(Request.Form("sesso") = "F") Then _ CF_Giorno = CF_Giorno + 40 If(Len(CF_Giorno) < 2) Then _ CF_Giorno = "0" & CF_Giorno Codice_Fiscale = Codice_Fiscale & CF_Giorno ' Codice comune Codice_Fiscale = Codice_Fiscale & Request.Form("comune") ' Carattere di controllo Set Controllo = New RegExp With Controllo .Global = True .IgnoreCase = True .Pattern = "[A-Z]|[0-9]" End With Set Matches = Controllo.Execute(Codice_Fiscale) For Each Match In Matches vMod = Match.FirstIndex Mod 2 ' Sa di molto palloso quest'ultimo passaggio... If vMod = 0 Then ' Dispari Select Case CStr(Match.Value) Case "A" Incremento = Incremento + 1 Case "0" Incremento = Incremento + 1 Case "B" ' Incremento di 0 Case "1" ' Incremento di 0 Case "C" Incremento = Incremento + 5 Case "2" Incremento = Incremento + 5 Case "D" Incremento = Incremento + 7 Case "3" Incremento = Incremento + 7 Case "E" Incremento = Incremento + 9 Case "4" Incremento = Incremento + 9 Case "F" Incremento = Incremento + 13 Case "5" Incremento = Incremento + 13 Case "G" Incremento = Incremento + 15 Case "6" Incremento = Incremento + 15 Case "H" Incremento = Incremento + 17 Case "7" Incremento = Incremento + 17 Case "I" Incremento = Incremento + 19 Case "8" Incremento = Incremento + 19 Case "J" Incremento = Incremento + 21 Case "9" Incremento = Incremento + 21 Case "K" Incremento = Incremento + 2 Case "L" Incremento = Incremento + 4 Case "M" Incremento = Incremento + 18 Case "N" Incremento = Incremento + 20 Case "O" Incremento = Incremento + 11 Case "P" Incremento = Incremento + 3 Case "Q" Incremento = Incremento + 6 Case "R" Incremento = Incremento + 8 Case "S" Incremento = Incremento + 12 Case "T" Incremento = Incremento + 14 Case "U" Incremento = Incremento + 16 Case "V" Incremento = Incremento + 10 Case "W" Incremento = Incremento + 22 Case "X" Incremento = Incremento + 25 Case "Y" Incremento = Incremento + 24 Case "Z" Incremento = Incremento + 23 Case Else Response.Write("Uhmmmm...") End Select Else ' Pari Select Case Cstr(Match.Value) Case "A" ' Incremento di 0 Case "0" ' Incremento di 0 Case "B" Incremento = Incremento + 1 Case "1" Incremento = Incremento + 1 Case "C" Incremento = Incremento + 2 Case "2" Incremento = Incremento + 2 Case "D" Incremento = Incremento + 3 Case "3" Incremento = Incremento + 3 Case "E" Incremento = Incremento + 4 Case "4" Incremento = Incremento + 4 Case "F" Incremento = Incremento + 5 Case "5" Incremento = Incremento + 5 Case "G" Incremento = Incremento + 6 Case "6" Incremento = Incremento + 6 Case "H" Incremento = Incremento + 7 Case "7" Incremento = Incremento + 7 Case "I" Incremento = Incremento + 8 Case "8" Incremento = Incremento + 8 Case "J" Incremento = Incremento + 9 Case "9" Incremento = Incremento + 9 Case "K" Incremento = Incremento + 10 Case "L" Incremento = Incremento + 11 Case "M" Incremento = Incremento + 12 Case "N" Incremento = Incremento + 13 Case "O" Incremento = Incremento + 14 Case "P" Incremento = Incremento + 15 Case "Q" Incremento = Incremento + 16 Case "R" Incremento = Incremento + 17 Case "S" Incremento = Incremento + 18 Case "T" Incremento = Incremento + 19 Case "U" Incremento = Incremento + 20 Case "V" Incremento = Incremento + 21 Case "W" Incremento = Incremento + 22 Case "X" Incremento = Incremento + 23 Case "Y" Incremento = Incremento + 24 Case "Z" Incremento = Incremento + 25 Case Else Response.Write("Uhmmmm...") End Select End If Next Set Controllo = Nothing Select Case Incremento Mod 26 Case 0 Carattere = "A" Case 1 Carattere = "B" Case 2 Carattere = "C" Case 3 Carattere = "D" Case 4 Carattere = "E" Case 5 Carattere = "F" Case 6 Carattere = "G" Case 7 Carattere = "H" Case 8 Carattere = "I" Case 9 Carattere = "J" Case 10 Carattere = "K" Case 11 Carattere = "L" Case 12 Carattere = "M" Case 13 Carattere = "N" Case 14 Carattere = "O" Case 15 Carattere = "P" Case 16 Carattere = "Q" Case 17 Carattere = "R" Case 18 Carattere = "S" Case 19 Carattere = "T" Case 20 Carattere = "U" Case 21 Carattere = "V" Case 22 Carattere = "W" Case 23 Carattere = "X" Case 24 Carattere = "Y" Case 25 Carattere = "Z" Case Else Response.Write("ERRORE (resto) : " & Incremento Mod 26 & "

") End Select Codice_Fiscale = Codice_Fiscale & Carattere End If %> Esempio : Calcolo del Codice Fiscale

Calcolo del Codice Fiscale

<% ' Elaborazione ad nizio pagina %>
"> Nome : Cognome :

Data di Nascita : <% Mese = Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre") %>

Sesso : Maschile Femminile

Comune di nascita :


Codice Fiscale : <% Response.Write(Codice_Fiscale) %>

Descrizione

Per l'algoritmo per il calcolo del codice fiscale ho fatto riferimento a : PietralcinaNET
L'esempio utilizza una serie di Regular Expression per effettuare il calcolo.


Dadamax.Net