Imaginsystems


Tecniche di Programmazione - Codici Sorgenti - News Informatiche
Archivio Posts
Anno 2014

Anno 2013

Anno 2012
Statistiche
  • Views Home Page: 74.608
  • Views Posts: 554.589
  • Views Gallerie: 0
  • n° Posts: 210
  • n° Commenti: 224

VB.NET - CALCOLO DEL CODICE FISCALE E LETTURA DATI DA UN CODICE FISCALE

VB.NET - CALCOLO DEL CODICE FISCALE E LETTURA DATI DA UN CODICE FISCALE 

Oggi vi metto a disposizione il codice sorgente di come Calcolare un Codice Fiscale e di come Leggere o Estrapolare i dati da un Codice Fiscale come la data di nascita, il comune, la provincia e parte del nome e cognome. 

Il programma deve essere aggiustato graficamente, contiene tutto il sorgente e le funzioni importanti sia di Calcolo che di Lettura ( Sono ben accetti commenti e suggerimenti, ammetto che il codice non è tutto pulito, motivo è il tempo che non ho ma spero che apprezzate lo stesso lo sforzo ihihih!!! ) :

Alla fine del Post troverete il link dove scaricare il file con i sorgenti del programma Calcolo del Codice Fiscale e Lettura Codice Fiscale.

Crea Codice Fiscale CF :


Leggi dati del Codice Fiscale CF :


N.B. Mi sono accorto grazie a innumerevoli commenti che non è completo il codice, ciò è che esclude alcuni casi particolari. Al momento non ho tempo per aggiornarlo, ma chiunque vuole può farlo e io sono ben contento di aggiornare questa pagina aggiungendo il suo nome e link al progetto su github.

CODICE VISUAL STUDIO 2010 - VISUAL BASIC .NET - VB.NET:

Public Class Form1
    Public Bandiera As Boolean = False
    Public CarattereMese As String 'Si trova nella posizione 9 del codice fiscale
    Public NumeroAnno As Integer 'Si trova nella posizione 7 e 8 codice fiscale
    Public NumeroGiorno As Integer 'Si trova nella posizione 10 e 11 codice fiscale
    Public ArrayMesi() As String = {"A", "B", "C", "D", "E", "H", "L", "M", "P", "R", "S", "T"} 'Lettere che corrispondono al mese
    Public ArrayDescrizioneMesi() As String = {"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"}
    Public ArrayCharPosizioneDispari() As Integer = {1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23}
    Public ArrayChar() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
    Public ArrayPari As New ArrayList
    Public ArrayDispari As New ArrayList
    Public ArrayVocali() As String = {"A", "E", "I", "O", "U"}

    Public Parte1CodiceFiscale As String
    Public Parte2CodiceFiscale As String
    Public Parte3CodiceFiscale As String


    'Variabili 
    Dim DtSet As System.Data.DataSet
    Dim myConnectionString As String
    Dim myConnection As System.Data.OleDb.OleDbConnection = New OleDb.OleDbConnection
    Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
    Dim ValoreCella As String
    Dim ValoreDaCercare As String

    ''' <summary>
    ''' CpmmettiFileExcel - Funzione che serve per connettersi al file .xls
    ''' </summary>
    ''' <param name="NomeFileExcel"></param>
    ''' <remarks></remarks>
    Private Sub ConnettiFileExcel(ByVal NomeFileExcel As String)
        Try

            myConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & NomeFileExcel & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
            myConnection.ConnectionString = myConnectionString
            myConnection.Open()

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    ''' <summary>
    ''' DisconnettiFileExcel - Funzione che serve per disconnetere e chiudere la lettura del file .xls
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub DisconnettiFileExcel()
        Try
            myConnection.Close()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
    ''' <summary>
    ''' CaricaCartella - Carica il nome della cartella o finistra del file Excel
    ''' </summary>
    ''' <param name="NomeCartella"></param>
    ''' <remarks></remarks>
    Private Sub CaricaCartella(ByVal NomeCartella As String)
        Try

            MyCommand = New System.Data.OleDb.OleDbDataAdapter _
                  ("select * from [" & NomeCartella & "$]", myConnection)
            MyCommand.TableMappings.Add("Table", "TestTable")
            DtSet = New System.Data.DataSet
            MyCommand.Fill(DtSet)

            'Copia interamente la tabella nel DataGridView
            'DataGridView1.DataSource = DtSet.Tables(0)

            Dim ValoreColonna As String
            'Ciclo che serve per popolare il DAtaGridView
            For i As Integer = 0 To DtSet.Tables(0).Rows.Count - 1
                DataGridView1.Rows.Add()
                For j As Integer = 0 To DtSet.Tables(0).Columns.Count - 1
                    ValoreCella = DtSet.Tables(0).Rows(i).Item(j).ToString
                    DataGridView1.Rows(i).Cells(j).Value = ValoreCella
                Next
                ValoreColonna = DtSet.Tables(0).Rows(i).Item(2).ToString
                cmbComune.Items.Insert(i, ValoreColonna)
            Next

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    ''' <summary>
    ''' CaricaConfiguraioneDataGridView - Carica le caratteristiche del DataGridView
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub CaricaConfiguraioneDataGridView()

        DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        DataGridView1.AutoSize = True
    End Sub


    Function xls_clean(ByVal in_put As String)
        Dim clean_and_clear() As String = {",", "%", "/", "'", ".", "(", ")", ";", "!", "+", "^", "&", "\", "?", "]", "[", "{", "}", "<", ">", "@"}
        Dim x As Integer

        For x = 0 To UBound(clean_and_clear) Step 1
            in_put = Replace(in_put, clean_and_clear(x), "")
        Next x
        xls_clean = Trim$(in_put)
        Return xls_clean
    End Function



    Private Function CarattereControllo(ByVal CodiceFiscale As String) As Boolean
        Dim risultato As Integer = 0
        Dim sommapari As Integer = 0
        Dim sommadispari As Integer = 0
        Try
            If CodiceFiscale.ToString <> "" Then
                For i As Integer = 0 To CodiceFiscale.Length - 2 Step 1
                    'Vi ricordo che l'array parte da zero ma noi dobbiamo calcolare come se fosse 1 
                    'e quindi Dispari si trovano nella posizione Pari e i Pari si trovano nella posizione Dispari
                    If i Mod (2) = 1 Then
                        'Indice Dispari - Posizione Dispari)
                        ArrayPari.Add(CodiceFiscale.Substring(i, 1).ToString)
                    Else
                        'Indice Pari - Posizione Pari
                        ArrayDispari.Add(CodiceFiscale.Substring(i, 1).ToString)
                    End If
                Next
                For i As Integer = 0 To ArrayPari.Count - 1 Step 1
                    If IsNumeric(ArrayPari(i).ToString) Then
                        sommapari = sommapari + ArrayPari(i).ToString
                        'Console.WriteLine(ArrayPari(i).ToString & " ArrayPari(" & i & ").ToString = " & ArrayPari(i).ToString)
                    Else
                        For j As Integer = 0 To ArrayChar.Length - 1 Step 1
                            If (UCase(ArrayPari(i).ToString) = ArrayChar(j).ToString) Then
                                sommapari = sommapari + j
                                'Console.WriteLine(ArrayPari(i).ToString & " ArrayPari(" & i & ").ToString = " & j)
                                Exit For
                            End If
                        Next
                    End If
                Next
                For i As Integer = 0 To ArrayDispari.Count - 1 Step 1
                    If IsNumeric(ArrayDispari(i).ToString) Then
                        sommadispari = sommadispari + ArrayCharPosizioneDispari(ArrayDispari(i).ToString).ToString
                        'Console.WriteLine(ArrayDispari(i).ToString & " ArrayDispari(" & i & ").ToString = " & ArrayCharPosizioneDispari(ArrayDispari(i).ToString).ToString)
                    Else
                        For j As Integer = 0 To ArrayChar.Length - 1 Step 1
                            If (UCase(ArrayDispari(i).ToString) = ArrayChar(j).ToString) Then
                                sommadispari = sommadispari + ArrayCharPosizioneDispari(j).ToString
                                'Console.WriteLine(ArrayDispari(i).ToString & " ArrayCharPosizioneDispari(" & j & ").ToString = " & ArrayCharPosizioneDispari(j).ToString)
                                Exit For
                            End If
                        Next
                    End If
                Next
                risultato = 0

            End If

            ArrayPari.Clear()
            ArrayDispari.Clear()
            risultato = (sommapari + sommadispari) Mod 26
            'Console.WriteLine(ArrayChar(risultato).ToString & " = " & CodiceFiscale.Substring(CodiceFiscale.Length - 1, 1).ToString)
            If (ArrayChar(risultato).ToString = UCase(CodiceFiscale.Substring(CodiceFiscale.Length - 1, 1).ToString)) Then
                Return True
            Else
                Return False
            End If
        Catch ex As Exception
            'Errore generato da qualche numero e carattere strano
            Return False
        End Try
    End Function

    ''' <summary>
    ''' Carica il programma - Load Form
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' txtCodiceFiscale.Text = "DRBDVD86T06H501K"
        Dim File As String
        File = Application.StartupPath & "\ELENCO_COMUNI_2012.xls"
        ConnettiFileExcel(File)
        CaricaCartella("Elenco Comuni")
        DisconnettiFileExcel()
    End Sub

    Private Sub CaricaMaiuscoloBox()
        txtCodiceFiscale.Text = UCase(txtCodiceFiscale.Text)
        txtNome.Text = UCase(txtNome.Text)
        txtCognome.Text = UCase(txtCognome.Text)
        txtDataDiNascita.Text = UCase(txtDataDiNascita.Text)
        txtSesso.Text = UCase(txtSesso.Text)
        txtComune.Text = UCase(txtComune.Text)
        txtProvincia.Text = UCase(txtProvincia.Text)
    End Sub

    Private Sub txtCodiceFiscale_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtCodiceFiscale.Click
        If rbtLeggiCodiceFiscale.Checked = True Then
            txtCodiceFiscale.ReadOnly = False
            txtCodiceFiscale.Text = ""
        Else
            txtCodiceFiscale.ReadOnly = True
        End If
    End Sub

    Private Sub txtCodiceFiscale_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCodiceFiscale.TextChanged
        If rbtCalcolaCodiceFiscale.Checked = True Then
            Exit Sub
        End If
        Select Case txtCodiceFiscale.TextLength
            Case 16 'Quando ho inserito tutto il codice fiscale
                txtCodiceFiscale.Text = txtCodiceFiscale.Text.Replace(" ", "")
                Dim Controllo As Boolean = CarattereControllo(txtCodiceFiscale.Text)
                If Controllo = False Then
                    MsgBox("Errore Codice Fiscale ", vbInformation, "Errore")
                Else
                    If txtCodiceFiscale.TextLength <> 16 Or txtCodiceFiscale.TextLength = 0 Then
                        PulisciTutto()
                        Exit Select
                    End If
                    If rbtLeggiCodiceFiscale.Checked = True Then
                        'Lettura Codice Fiscale
                        LetturaCodiceFiscale()
                    Else
                        'Calcola Codice Fiscale
                        CalcolaCodiceFiscale()
                    End If
                End If
            Case 0 'Quando ho cancellato il codice fiscale
                PulisciTutto()
            Case Else
                txtCodiceFiscale.Text = txtCodiceFiscale.Text.Replace(" ", "")
        End Select
    End Sub

    Private Sub PulisciTutto()
        txtNome.Text = ""
        txtCognome.Text = ""
        txtDataDiNascita.Text = ""
        txtSesso.Text = ""
        txtComune.Text = ""
        txtProvincia.Text = ""
    End Sub

    Private Sub BloccaBox()
        txtCodiceFiscale.ReadOnly = True
        txtNome.ReadOnly = True
        txtCognome.ReadOnly = True
        txtDataDiNascita.ReadOnly = True
        txtSesso.ReadOnly = True
        txtComune.ReadOnly = True
        txtProvincia.ReadOnly = True
    End Sub

    Private Sub SbloccaBox()
        txtCodiceFiscale.ReadOnly = False
        txtNome.ReadOnly = False
        txtCognome.ReadOnly = False
        txtDataDiNascita.ReadOnly = False
        txtSesso.ReadOnly = False
        txtComune.ReadOnly = False
        ' txtProvincia.ReadOnly = False
    End Sub

    Private Sub LetturaCodiceFiscale()
        txtCodiceCatasto.Text = ""
        CarattereMese = Mese(txtCodiceFiscale.Text.Substring(8, 1).ToString)
        If IsNumeric(txtCodiceFiscale.Text.Substring(6, 2).ToString) And IsNumeric(txtCodiceFiscale.Text.Substring(9, 2).ToString) Then
            NumeroAnno = txtCodiceFiscale.Text.Substring(6, 2).ToString
            NumeroGiorno = txtCodiceFiscale.Text.Substring(9, 2).ToString
        Else
            txtDataDiNascita.Text = ""
            Exit Sub
        End If

        Dim VerificaNumero As Integer = NumeroGiorno
        If VerificaNumero - 40 > 0 Then
            NumeroGiorno = NumeroGiorno - 40
            txtSesso.Text = "F"
        Else
            txtSesso.Text = "M"
        End If

       'If NumeroGiorno < 9 Then
        '    'Visualizza la data in questa maniera dd MESE yy ex: 06 Dicembre 86
        '    'txtDataDiNascita.Text = "0" & NumeroGiorno & " " & ArrayDescrizioneMesi(CarattereMese) & " " & NumeroAnno

        '    'Visualizza la data in questa maniera dd / mm / yy ex: 06/12/86
        '    txtDataDiNascita.Text = "0" & NumeroGiorno & "/" & CarattereMese + 1 & "/" & NumeroAnno
        'Else
        'Visualizza la data in questa maniera dd MESE yy ex: 16 Dicembre 86
        'txtDataDiNascita.Text = NumeroGiorno & " " & ArrayDescrizioneMesi(CarattereMese) & " " & NumeroAnno
        'End If


       If CarattereMese < 9 Then
            'Visualizza la data in questa maniera dd / mm / yy ex: 16/12/86
            txtDataDiNascita.Text = NumeroGiorno & "/0" & CarattereMese + 1 & "/" & NumeroAnno
        Else
            'Visualizza la data in questa maniera dd / mm / yy ex: 16/12/86
            txtDataDiNascita.Text = NumeroGiorno & "/" & CarattereMese + 1 & "/" & NumeroAnno
        End If

        txtDataDiNascita.TextAlign = HorizontalAlignment.Center

        ValoreDaCercare = txtCodiceFiscale.Text.Substring(11, 4)
        txtCodiceCatasto.Text = ValoreDaCercare

        txtNome.Text = txtCodiceFiscale.Text.Substring(3, 3).ToString
        txtCognome.Text = txtCodiceFiscale.Text.Substring(0, 3).ToString

        CaricaMaiuscoloBox()
    End Sub


    Private Sub CalcolaCodiceFiscale()

        txtCodiceFiscale.Text = ""
        'Prima Cosa 
        Dim Cognome As String
        Dim Nome As String
        Dim Sesso As String

        txtSesso.Text = UCase(txtSesso.Text)

        Sesso = UCase(txtSesso.Text)
        Cognome = UCase(txtCognome.Text.Replace(" ", "").ToString)
        Nome = UCase(txtNome.Text.Replace(" ", "").ToString)

        Dim Data As Date
        Dim Aumenta As Integer = 0

        If (Sesso = "F") Then
            Aumenta = 40
        End If

        If IsDate(txtDataDiNascita.Text) Then
            Data = txtDataDiNascita.Text
            Dim giorno As Integer = Data.Day
            giorno = giorno + Aumenta
            Dim mese As Integer = Data.Month
            Parte2CodiceFiscale = Data.ToString("yy") & ArrayMesi(mese - 1) & giorno.ToString()
        End If

        Dim ArrayConsonanti As Array

        If Cognome.Length > 0 Then

            For i As Integer = 0 To Cognome.Length - 1
                For j As Integer = 0 To ArrayVocali.Length - 1
                    Cognome = Cognome.ToString.Replace(ArrayVocali(j).ToString, "")
                Next
            Next
        End If

        Select Case Cognome.Length

            Case Is = 3, Is > 3

                Parte1CodiceFiscale = Cognome.Substring(0, 3).ToString

            Case Is = 2

                Parte1CodiceFiscale = PulisciStringa(txtCognome.Text, Cognome)
                Parte1CodiceFiscale = Cognome.Substring(0, 2).ToString & Parte1CodiceFiscale(0).ToString

            Case Is = 1

                Parte1CodiceFiscale = PulisciStringa(txtCognome.Text, Cognome)
                Parte1CodiceFiscale = Cognome.Substring(0, 1).ToString & Parte1CodiceFiscale(0).ToString

            Case Is = 0

                Parte1CodiceFiscale = txtCognome.Text

                Select Case Parte1CodiceFiscale.Length
                    Case Is = 3, Is > 4
                        Parte1CodiceFiscale = Parte1CodiceFiscale.Substring(0, 3).ToString
                    Case Is = 2
                        Parte1CodiceFiscale = Parte1CodiceFiscale.Substring(0, 2).ToString & "X"
                    Case Is = 1
                        Parte1CodiceFiscale = Parte1CodiceFiscale.Substring(0, 1).ToString & "XX"
                    Case Is = 0
                        Parte1CodiceFiscale = "XXX"
                End Select


        End Select


        If Nome.Length > 2 Then

            For i As Integer = 0 To Nome.Length - 1
                For j As Integer = 0 To ArrayVocali.Length - 1
                    Nome = Nome.ToString.Replace(ArrayVocali(j).ToString, "")
                Next
            Next
        End If

        Dim TEMP As String
        Select Case Nome.Length

            Case Is = 4, Is > 4
                'Mariangela = MNG
                'Aldo Maria = LMR
                ArrayConsonanti = Nome.ToArray
                Parte1CodiceFiscale = Parte1CodiceFiscale & ArrayConsonanti(0).ToString & ArrayConsonanti(2).ToString & ArrayConsonanti(3).ToString

            Case Is = 3
                'Bruno = BRN
                ArrayConsonanti = Nome.ToArray
                Parte1CodiceFiscale = Parte1CodiceFiscale & ArrayConsonanti(0).ToString & ArrayConsonanti(1).ToString & ArrayConsonanti(2).ToString

            Case Is = 2
                'Luca = LCU
                ArrayConsonanti = Nome.ToArray
                TEMP = PulisciStringa(UCase(txtNome.Text), Nome)
                If TEMP.Length > 0 Then
                    Parte1CodiceFiscale = Parte1CodiceFiscale & ArrayConsonanti(0).ToString & ArrayConsonanti(1).ToString & TEMP(0).ToString
                Else
                    Parte1CodiceFiscale = Parte1CodiceFiscale & ArrayConsonanti(0).ToString & ArrayConsonanti(1).ToString & "X"
                End If
            Case Is = 1
                'Lia = LIA
                ArrayConsonanti = Nome.ToArray
                TEMP = PulisciStringa(UCase(txtNome.Text), Nome)
                If TEMP.Length > 0 Then
                    Parte1CodiceFiscale = Parte1CodiceFiscale & ArrayConsonanti(0).ToString & TEMP(0).ToString & TEMP(1).ToString
                Else
                    Parte1CodiceFiscale = Parte1CodiceFiscale & ArrayConsonanti(0).ToString & "X"
                End If
            Case Is = 0
                Select Case txtNome.TextLength
                    Case Is = 3, Is > 4
                        Parte1CodiceFiscale = Parte1CodiceFiscale & txtNome.Text.Substring(0, 3).ToString
                    Case Is = 2
                        Parte1CodiceFiscale = Parte1CodiceFiscale & txtNome.Text.Substring(0, 2).ToString & "X"
                    Case Is = 1
                        Parte1CodiceFiscale = Parte1CodiceFiscale & txtNome.Text.Substring(0, 1).ToString & "XX"
                    Case Is = 0
                        Parte1CodiceFiscale = Parte1CodiceFiscale & "XXX"
                End Select

        End Select


        Parte2CodiceFiscale = Parte2CodiceFiscale & txtCodiceCatasto.Text
        Parte2CodiceFiscale = Parte1CodiceFiscale & Parte2CodiceFiscale
        Parte3CodiceFiscale = StringCarattereControllo(Parte2CodiceFiscale)


        txtCodiceFiscale.Text = Parte2CodiceFiscale & Parte3CodiceFiscale
        'Parte3CodiceFiscale = Parte1CodiceFiscale & Parte2CodiceFiscale & Parte3CodiceFiscale
        txtCodiceFiscale.ReadOnly = True

    End Sub

    Private Function PulisciStringa(ByVal Array1 As String, ByVal array2 As String) As String
        Dim temp1 As Array
        temp1 = array2.ToCharArray

        Array1 = UCase(Array1)
        For j As Integer = 0 To temp1.Length - 1 Step 1
            Array1 = Array1.ToString.Replace(temp1(j).ToString, "")
        Next
        Return Array1.ToString
    End Function

    Private Function Mese(ByVal CarattereMese As String) As String
        Try
            CarattereMese = UCase(CarattereMese)
            For i As Integer = 0 To UBound(ArrayMesi) Step 1
                If CarattereMese = ArrayMesi(i).ToString Then
                    Return i
                End If
            Next
            Return -1
        Catch ex As Exception
            MsgBox("Errore : " & ex.ToString, vbCritical, "ERRORE!!!")
            Return -1
        End Try
    End Function

    Private Sub btnChiudi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChiudi.Click
        End
    End Sub


    Private Sub rbtCalcolaCodiceFiscale_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbtCalcolaCodiceFiscale.CheckedChanged
        If rbtCalcolaCodiceFiscale.Checked = True Then
            PulisciTutto()
            BloccaBox()
            txtCodiceFiscale.Text = ""
            txtNome.ReadOnly = False
            cmbComune.Visible = True
            cmbComune.Text = ""
            cmbComune.Enabled = False
            txtComune.Visible = False
            btnCalcola.Visible = True
            btnCopia.Text = "Cop&ia CF"
        Else
            btnCopia.Text = "&Incolla CF"
        End If
    End Sub



    Private Sub rbtLeggiCodiceFiscale_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbtLeggiCodiceFiscale.CheckedChanged
        If rbtLeggiCodiceFiscale.Checked = True Then
            PulisciTutto()
            BloccaBox()
            cmbComune.Visible = False
            cmbComune.Text = ""
            txtComune.Visible = True
            btnCalcola.Visible = False
        End If

    End Sub

    Private Sub txtCodiceCatasto_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCodiceCatasto.TextChanged
        If txtCodiceCatasto.Text = "" Then
            Exit Sub
        End If
        Dim RigaValore As Integer
        'SCRIVI()
        txtCodiceCatasto.Text = UCase(txtCodiceCatasto.Text)
        RigaValore = MetodoCerca(0, DataGridView1.Rows.Count - 1, txtCodiceCatasto.Text, 0)

        If RigaValore <> -1 Then
            DataGridView1.CurrentCell = DataGridView1.Item(0, RigaValore)
            txtProvincia.Text = DataGridView1.Item(1, RigaValore).Value
            txtComune.Text = DataGridView1.Item(2, RigaValore).Value
            'MsgBox("Trovato")
        Else
            txtComune.Text = "Error"
            txtProvincia.Text = "Error"
        End If
        If rbtCalcolaCodiceFiscale.Checked = True Then
            CalcolaCodiceFiscale()
        End If
    End Sub

    ''' <summary>
    ''' MetodoCerca - /* Funzione per Ricerca Binaria con ricorsione */
    ''' </summary>
    ''' <param name="Partenza"></param>
    ''' <param name="Fine"></param>
    ''' <param name="Valore"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function MetodoCerca(ByVal Partenza As Integer, ByVal Fine As Integer, ByVal Valore As String, ByVal Colonna As Integer) As Integer
        If Valore = "" Then
            Return -1
        End If

        If Partenza > Fine Then
            Return -1
        End If

        Dim middle As Integer = 0
        middle = (Partenza + Fine) / 2
        Console.WriteLine(DataGridView1.Item(0, middle).Value.GetHashCode & " = " & Valore.GetHashCode)
        If Valore < DataGridView1.Item(Colonna, middle).Value Then
            Return MetodoCerca(Partenza, middle - 1, Valore, Colonna)
        ElseIf Valore > DataGridView1.Item(Colonna, middle).Value Then
            Return MetodoCerca(middle + 1, Fine, Valore, Colonna)
        ElseIf Valore = DataGridView1.Item(Colonna, middle).Value Then
            Return middle
        End If
        Return -1
    End Function










    Private Sub cmbComune_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbComune.SelectedIndexChanged
        If cmbComune.Text <> "" Then
            Dim rigavalore As Integer
            rigavalore = MetodoCerca(0, DataGridView1.Rows.Count - 1, UCase(cmbComune.Text), 2)

            If rigavalore <> -1 Then
                txtProvincia.Text = DataGridView1.Item(1, rigavalore).Value
                txtComune.Text = DataGridView1.Item(2, rigavalore).Value
                txtCodiceCatasto.Text = DataGridView1.Item(0, rigavalore).Value
            Else
                'Errore
                txtCodiceCatasto.Text = ""
                txtProvincia.Text = "Err"
            End If
        End If
    End Sub

    Private Sub cmbComune_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbComune.TextChanged
        If cmbComune.Text <> "" Then
            Dim rigavalore As Integer
            rigavalore = MetodoCerca(0, DataGridView1.Rows.Count - 1, UCase(cmbComune.Text), 2)

            If rigavalore <> -1 Then
                txtProvincia.Text = DataGridView1.Item(1, rigavalore).Value
                txtComune.Text = DataGridView1.Item(2, rigavalore).Value
                txtCodiceCatasto.Text = DataGridView1.Item(0, rigavalore).Value
            Else
                'Errore
                txtProvincia.Text = ""
                txtCodiceCatasto.Text = ""
            End If
        Else
            txtCodiceCatasto.Text = ""
            txtProvincia.Text = ""
        End If
    End Sub




    Private Sub txtSesso_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtSesso.Validating
        Select Case txtSesso.Text
            Case "M", "m"
                Exit Select
            Case "F", "f"
                Exit Select
            Case Else
                txtSesso.Text = ""
                MsgBox("Errore Inserire M = Maschio e F = Femmina", vbCritical, "ATTENZIONE!!!")
                Exit Sub
        End Select


    End Sub


    Private Sub txtNome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNome.TextChanged
        If rbtCalcolaCodiceFiscale.Checked = True Then
            If txtNome.TextLength > 0 Then
                txtCognome.ReadOnly = False
            Else
                txtCognome.ReadOnly = True
            End If
        End If
    End Sub

    Private Sub txtCognome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCognome.TextChanged
        If rbtCalcolaCodiceFiscale.Checked = True Then
            If txtCognome.TextLength > 0 Then
                txtDataDiNascita.ReadOnly = False
            Else
                txtDataDiNascita.ReadOnly = True
            End If
        End If
    End Sub

    Private Sub txtSesso_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSesso.TextChanged
        If rbtCalcolaCodiceFiscale.Checked = True Then
            If txtSesso.TextLength > 0 Then
                cmbComune.Enabled = True
            Else
                txtSesso.ReadOnly = False
            End If
        End If
    End Sub


    Private Function StringCarattereControllo(ByVal CodiceFiscale As String) As String
        Dim risultato As Integer = 0
        Dim sommapari As Integer = 0
        Dim sommadispari As Integer = 0
        Try
            If CodiceFiscale.ToString <> "" Then
                For i As Integer = 0 To CodiceFiscale.Length - 1 Step 1
                    'Vi ricordo che l'array parte da zero ma noi dobbiamo calcolare come se fosse 1 
                    'e quindi Dispari si trovano nella posizione Pari e i Pari si trovano nella posizione Dispari
                    If i Mod (2) = 1 Then
                        'Indice Dispari - Posizione Dispari)
                        ArrayPari.Add(CodiceFiscale.Substring(i, 1).ToString)
                    Else
                        'Indice Pari - Posizione Pari
                        ArrayDispari.Add(CodiceFiscale.Substring(i, 1).ToString)
                    End If
                Next
                For i As Integer = 0 To ArrayPari.Count - 1 Step 1
                    If IsNumeric(ArrayPari(i).ToString) Then
                        sommapari = sommapari + ArrayPari(i).ToString
                        'Console.WriteLine(ArrayPari(i).ToString & " ArrayPari(" & i & ").ToString = " & ArrayPari(i).ToString)
                    Else
                        For j As Integer = 0 To ArrayChar.Length - 1 Step 1
                            If (UCase(ArrayPari(i).ToString) = ArrayChar(j).ToString) Then
                                sommapari = sommapari + j
                                'Console.WriteLine(ArrayPari(i).ToString & " ArrayPari(" & i & ").ToString = " & j)
                                Exit For
                            End If
                        Next
                    End If
                Next
                For i As Integer = 0 To ArrayDispari.Count - 1 Step 1
                    If IsNumeric(ArrayDispari(i).ToString) Then
                        sommadispari = sommadispari + ArrayCharPosizioneDispari(ArrayDispari(i).ToString).ToString
                        'Console.WriteLine(ArrayDispari(i).ToString & " ArrayDispari(" & i & ").ToString = " & ArrayCharPosizioneDispari(ArrayDispari(i).ToString).ToString)
                    Else
                        For j As Integer = 0 To ArrayChar.Length - 1 Step 1
                            If (UCase(ArrayDispari(i).ToString) = ArrayChar(j).ToString) Then
                                sommadispari = sommadispari + ArrayCharPosizioneDispari(j).ToString
                                'Console.WriteLine(ArrayDispari(i).ToString & " ArrayCharPosizioneDispari(" & j & ").ToString = " & ArrayCharPosizioneDispari(j).ToString)
                                Exit For
                            End If
                        Next
                    End If
                Next
                risultato = 0

            End If

            ArrayPari.Clear()
            ArrayDispari.Clear()
            risultato = (sommapari + sommadispari) Mod 26
            'Console.WriteLine(ArrayChar(risultato).ToString & " = " & CodiceFiscale.Substring(CodiceFiscale.Length - 1, 1).ToString)
            Return ArrayChar(risultato).ToString
        Catch ex As Exception
            'Errore generato da qualche numero e carattere strano
            Return "Errore"
        End Try
    End Function

    Private Sub txtProvincia_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtProvincia.TextChanged
        If rbtCalcolaCodiceFiscale.Checked = True Then
            If cmbComune.Text.Length > 2 Then
                Dim rigavalore As Integer
                rigavalore = MetodoCerca(0, DataGridView1.Rows.Count - 1, UCase(cmbComune.Text), 2)

                If rigavalore <> -1 Then
                    txtCodiceCatasto.Text = DataGridView1.Item(0, rigavalore).Value
                Else
                    'Errore
                    'txtProvincia.Text = "Err"
                End If
            End If
        End If
    End Sub

    Private Sub btnCalcola_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalcola.Click
        If txtNome.TextLength > 0 And txtCognome.TextLength > 0 And txtDataDiNascita.TextLength > 0 And cmbComune.Text.Length > 0 And txtProvincia.TextLength > 0 Then
            If rbtCalcolaCodiceFiscale.Checked = True Then
                CalcolaCodiceFiscale()
            End If
        End If
    End Sub

    Private Sub txtDataDiNascita_MaskInputRejected(ByVal sender As Object, ByVal e As System.Windows.Forms.MaskInputRejectedEventArgs) Handles txtDataDiNascita.MaskInputRejected
        If rbtCalcolaCodiceFiscale.Checked = True Then
            If IsDate(txtDataDiNascita.Text) Then
                txtSesso.ReadOnly = False
            Else
                MsgBox("Errore Formato Data dd/mm/yyy ex: 01/01/2012 ", vbInformation, "ATTENZIONE!!!")
                txtDataDiNascita.Text = ""
                txtSesso.ReadOnly = True
            End If
        End If
    End Sub

   


    Private Sub txtDataDiNascita_TypeValidationCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.TypeValidationEventArgs) Handles txtDataDiNascita.TypeValidationCompleted
        If rbtCalcolaCodiceFiscale.Checked = True Then
            If txtDataDiNascita.TextLength > 0 Then
                txtSesso.ReadOnly = False
            Else
                txtSesso.ReadOnly = True
            End If
        End If
    End Sub

  Private Sub btnCopia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopia.Click
        If btnCopia.Text = "Cop&ia CF" Then
            If txtCodiceFiscale.Text <> "" Then
                My.Computer.Clipboard.SetText(txtCodiceFiscale.Text)
            Else
                Exit Sub
            End If
        Else

            If My.Computer.Clipboard.ContainsText = True Then
                txtCodiceFiscale.Text = My.Computer.Clipboard.GetText()
            End If
        End If
    End Sub
   
End Class

Potete scaricare il file d'esempio :

Password :  "ImaginSystem" 
Categoria: VB.NET
martedì, 26 giu 2012 Ore. 10.56

Messaggi collegati


Ora e Data
Mappa
Blogs Amici
    Copyright © 2002-2007 - Blogs 2.0
    dotNetHell.it | Home Page Blogs
    ASP.NET 2.0 Windows 2003