Advertisement
NelloRizzo

[VBA] Codice Fiscale

May 7th, 2019
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ' https://pastebin.com/u/nellorizzo
  2. Function GestisciCognome(cognome As String)
  3.     ' prendo il cognome
  4.    Dim c As String
  5.     c = UCase(cognome)
  6.     ' di esso prendo le consonanti
  7.    Dim risultato As String
  8.     risultato = PrendiConsonanti(c)
  9.     ' se sono meno di 3 aggiungo le vocali
  10.    If Len(risultato) < 3 Then risultato = risultato & PrendiVocali(c)
  11.     ' se ancora sono meno di 3 aggiungo una X
  12.    If Len(risultato) < 3 Then risultato = risultato & "XXX"
  13.     ' restituisco il risultato
  14.    GestisciCognome = Left(risultato, 3)
  15. End Function
  16.  
  17. Function PrendiConsonanti(testo As String)
  18.     ' preparo una variabile che possa contenere
  19.    ' il risultato!
  20.    Dim risultato As String
  21.     Dim indice As Integer ' variabile contatore
  22.    ' scandisco gli elementi nel testo!
  23.    For indice = 1 To Len(testo)
  24.         ' prendo l'i-esimo carattere
  25.        Dim car As String
  26.         car = Mid(testo, indice, 1)
  27.         ' controllo che sia un carattere alfabetico
  28.        If car >= "A" And car <= "Z" Then
  29.             ' siamo sicuri che sia un carattere alfabetico
  30.            ' devo controllare che sia una consonante
  31.            If InStr("AEIUO", car) = 0 Then
  32.                 ' controllo che NON sia vocale!
  33.                ' in questo caso lo aggiungo al risultato
  34.                risultato = risultato & car
  35.             End If
  36.         End If
  37.     Next
  38.     PrendiConsonanti = risultato
  39. End Function
  40. Function PrendiVocali(testo As String)
  41.     ' preparo una variabile che possa contenere
  42.    ' il risultato!
  43.    Dim risultato As String
  44.     Dim indice As Integer ' variabile contatore
  45.    ' scandisco gli elementi nel testo!
  46.    For indice = 1 To Len(testo)
  47.         ' prendo l'i-esimo carattere
  48.        Dim car As String
  49.         car = Mid(testo, indice, 1)
  50.         ' controllo che sia un carattere alfabetico
  51.        If car >= "A" And car <= "Z" Then
  52.             ' siamo sicuri che sia un carattere alfabetico
  53.            ' devo controllare che sia una consonante
  54.            If InStr("AEIUO", car) > 0 Then
  55.                 ' controllo che NON sia vocale!
  56.                ' in questo caso lo aggiungo al risultato
  57.                risultato = risultato & car
  58.             End If
  59.         End If
  60.     Next
  61.     PrendiVocali = risultato
  62. End Function
  63.  
  64. Function GestisciNome(nome As String)
  65.     ' funziona come per il cognome
  66.    Dim n As String
  67.     n = UCase(nome)
  68.     Dim risultato As String
  69.     risultato = PrendiConsonanti(n)
  70.     If Len(risultato) > 3 Then ' tranne se ci sono più di 3 consonanti
  71.        ' prendo la 1, 3, 4
  72.        risultato = Left(risultato, 1) & Mid(risultato, 3, 2)
  73.     ElseIf Len(risultato) < 3 Then
  74.         risultato = risultato & PrendiVocali(n)
  75.     End If
  76.     If Len(risultato) < 3 Then risultato = risultato & "XXX"
  77.     GestisciNome = Left(risultato, 3)
  78. End Function
  79. Function GestisciData(datanascita As Date, sesso As String)
  80.     Dim giorno As Integer
  81.     Dim mese As String
  82.     Dim anno As String
  83.    
  84.     anno = Right(Year(datanascita), 2)
  85.     mese = Mid("ABCDEHLMPRST", Month(datanascita), 1)
  86.     giorno = Day(datanascita)
  87.     If sesso = "F" Or sesso = "f" Then
  88.         giorno = giorno + 40
  89.     End If
  90.    
  91.     GestisciData = anno & mese & Right("0" & giorno, 2)
  92. End Function
  93.  
  94. Function CalcolaCodiceControllo(testo As String)
  95.     If Len(testo) = 15 Then
  96.         ' calcolo il codice di controllo SOLO
  97.        ' se ho a disposizione tutti 1 15 i caratteri
  98.        Dim somma As Integer
  99.         Dim spiazzamento As Integer
  100.         ' dobbiamo scorrere i 15 caratteri
  101.        For indice = 1 To 15
  102.             ' prendo l'iesimo carattere
  103.            Dim car As String
  104.             car = Mid(testo, indice, 1)
  105.             ' controllo se il carattere è una cifra o una lettera
  106.            If car >= "A" And car <= "Z" Then
  107.                 ' è una lettera
  108.                spiazzamento = Asc(car) - Asc("A")
  109.             Else
  110.                 ' è una cifra
  111.                spiazzamento = Asc(car) - Asc("0")
  112.             End If
  113.             ' se sono in posizione pari
  114.            If indice Mod 2 = 0 Then
  115.             ' faccio qualcosa
  116.                somma = somma + spiazzamento
  117.             Else
  118.             ' altrimenti
  119.                ' ne faccio un'altra...
  120.            End If
  121.         Next
  122.         CalcolaCodiceControllo = Chr(Asc("A") + somma Mod 26)
  123.     Else
  124.         ' se non ho a disposizione 15 caratteri
  125.        ' restituisco una X (valore fittizio)
  126.        CalcolaCodiceControllo = "X"
  127.     End If
  128. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement