Italian Controllo partita iva e codice fiscale

Calfa_Soft

New Member
Licensed User
Ciao a tutti, ho cercato sul forum ma non ho trovato nulla al riguardo, quindi ho riesumato del vecchio codice vb e l'ho adattato a B4A, i puristi non me vogliano, sicuramente si può ottimizzare ma a me serviva che funzionasse ... :)

Controlla_Partita_Iva:
Public Sub Controlla_Partita_Iva(numero As String) As Boolean

    Dim TmpRETURN As Boolean = False

    Try
        'Verifica ultima cifra
        Dim i As Int = 0
        Dim SumDisp As Int = 0
        Dim SumPari As Int = 0
        Dim Radd As Int = 0
        Dim SumTot As Int = 0
        Dim Check As Int = 0
        Dim TmpNUM As Int = 0
        Dim TmpTXT As String = ""

        '1.Si sommano le cifre di ordine dispari (1,3,5,7,9)
        For i = 0 To 8 Step 2
            TmpTXT = numero.SubString2( i, i+1)
            TmpNUM = TmpTXT
            SumDisp = SumDisp + TmpNUM
        Next

        '2.Si raddoppiano le cifre di ordine pari (2,4,6,8,10)
        'se il risultato è un numero di due cifre, si riduce ad una sola cifra sommando le due che lo compongono (es: 15 diventa 1+5)

        For i = 1 To 9 Step 2
            Radd = 2 * numero.SubString2( i, i+1)
            If Radd > 9 Then
                TmpTXT = Radd
                TmpNUM = TmpTXT.SubString2(0, 1)
                Radd = TmpNUM
                TmpNUM = TmpTXT.SubString2(1, 2)
                Radd = Radd + TmpNUM
            End If
            SumPari = SumPari + Radd
        Next

        '3. si sommano tutti i precedenti risultati (delle cifre dispari e di quelle pari raddoppiate.
        '4. si determina il totale delle due somme
        SumTot = SumPari + SumDisp
        '5.del risultato, si prende solo la cifra delle unità
        SumTot = SumTot Mod 10
        '6.Questa cifra si sottrae dal numero 10
        Check = (10 - SumTot) Mod 10

        TmpNUM = numero.SubString2(10,11)
        If Check = TmpNUM Then    TmpRETURN= True

    Catch
            Log(LastException)
    End Try

Return TmpRETURN


End Sub

Controlla_Codice_Fiscale:
public Sub Controlla_Codice_Fiscale(codicefiscale As String) As Boolean
   
    Dim TmpRETURN As Boolean = False

    Try
        Dim listaControllo As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        Dim listaPari() As Int = Array As Int (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25)
        Dim listaDispari() As Int = Array As Int (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)
        Dim k As Int = 0
        Dim x As Int = 0
        Dim cCodice(15) As String
        Dim somma As Long = 0
        Dim i As Int = 0
        Dim s As String = ""
       
        For k = 0 To 14
            cCodice(k) = codicefiscale.SubString2(k, k + 1)
        Next

        For i = 0 To 14
            s = cCodice(i)
            x = "0123456789".IndexOf(s)
            If Not (x < 0) Then
                s = listaControllo.SubString2( x, x+1)
            End If
            x = listaControllo.IndexOf(s)
            If (i Mod 2) = 0 Then
                x = listaDispari(x)
            Else
                x = listaPari(x)
            End If
            somma = somma + x
        Next
       
        x = somma Mod 26 + 1

        If listaControllo.SubString2( x-1,x) = codicefiscale.SubString2(codicefiscale.Length-1,codicefiscale.Length) Then
            TmpRETURN = True
        End If


    Catch
        Log(LastException)
    End Try

    Return TmpRETURN
   
End Sub

ovviamente qualsiasi miglioramento ecc è gradito, così come le osservazioni e perché no anche le critiche

Fabio Calzeroni - Calfasoft
 

amorosik

Expert
Licensed User
Interessante
Visto che ci sei, ti consiglierei di implementare anche la verifica partita Iva via Vies
Cosi' oltre al controllo formale ci sarebbe la sicurezza che la partita Iva e' ancora attiva, oppure e' cessata e quindi non piu' usabile
Non tutte sono iscritte al Vies ma tante si trovano
 

Calfa_Soft

New Member
Licensed User
grazie dell'apprezzamento e del suggerimento, in realtà l'applicazione che sto sviluppando e per la quale ho avuto questa necessità, dovrà operare perlopiù off line quindi nello specifico quel tipo di servizio sarebbe inutilizzabile.
Sarebbe inoltre fantastico se l'agenzia delle entrate mettesse liberamente a disposizione dei servizi utili allo scopo, in quanto buona parte delle micro aziende italiane non sono registrate sul VIES, ma credo che questa resti un'utopia ...
In ogni caso tengo conto del tuo suggerimento, e prima o poi ci metterò mano, grazie
 

MarcoRome

Expert
Licensed User
Longtime User
Interessante
Visto che ci sei, ti consiglierei di implementare anche la verifica partita Iva via Vies
Cosi' oltre al controllo formale ci sarebbe la sicurezza che la partita Iva e' ancora attiva, oppure e' cessata e quindi non piu' usabile
Non tutte sono iscritte al Vies ma tante si trovano
 

MarcoRome

Expert
Licensed User
Longtime User
Oppure potete collegarvi al sito europeo ( https://ec.europa.eu/taxation_customs/vies/checkVatTestService.wsdl )
ed inserendo Partita IVA e paese restituisce se è valido, il nome dell'attività, relativo indirizzo

1605111542279.png


B4X:
Dim countrycode As String = "IT"
    Dim vATNumber As String = "07392740960"   

    Dim req As String = $"<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:checkVat>
         <urn:countryCode>${countrycode}</urn:countryCode>
         <urn:vatNumber>${vATNumber}</urn:vatNumber>
      </urn:checkVat>
   </soapenv:Body>
</soapenv:Envelope>"$

    Dim xm As Xml2Map
    xm.Initialize

    Dim j As HttpJob
    j.Initialize("", Me)
    j.PostString($"https://ec.europa.eu/taxation_customs/vies/services/checkVatService"$, req)
    j.GetRequest.SetContentType("application/soap+xml; charset=utf-8")
   
    Wait For (j) JobDone(j As HttpJob)
    If j.Success Then
        Dim ParsedData As Map = xm.Parse(j.GetString)
       
        Dim root As Map = ParsedData.Get("soap:Envelope")
        Dim root1 As Map = root.Get("soap:Body")
        Dim VatResponse As Map = root1.Get("checkVatResponse")
        Dim valida As Boolean = VatResponse.Get("valid")
        Dim name As String = VatResponse.Get("name")
        Dim address As String = VatResponse.Get("address")
        If valida = True Then
            Log("**PARTITA IVA ISCRITTA**")
            Log(name)
            Log(address)
        Else
            Log("**PARTITA IVA NON ISCRITTA**")
        End If
       
   
    End If
    j.Release
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Qualche dubbio sul Codice Fiscale:

CODICE FISCALE, COM’E’ FATTO

Il codice fiscale è composto da 16 caratteri alfanumerici per le persone fisiche, mentre per le persone giuridiche, è composto da 11 caratteri. Per le associazioni riconosciute i caratteri sono 8, per quelle non riconosciute sono 9. Vediamo ora come viene composto il codice fiscale delle persone fisiche.

La prima parte riporta le prime tre consonanti del cognome e le prime tre del nome. Qualora le consonanti non fossero abbastanza, verrebbero usate anche le vocali. E se i cognomi e i nomi fossero troppo corti, verrebbe utilizzata la lettera X alla fine della sequenza che non verrebbe altrimenti completata. Per Carlo Bo, ad esempio, le prime sei lettere del codice fiscale sarebbero BOXCRL.

I cinque caratteri successivi riportano l’anno di nascita, e in particolare le ultime due cifre, il mese di nascita (Gennaio A, Febbraio B, Marzo C, Aprile D, Maggio E, Giugno H, Luglio L, Agosto M, Settembre P, Ottobre R, Novembre S, Dicembre T), e le due cifre del giorno di nascita.
Se, ad esempio, la data di nascita di Carlo Bo fosse il 3 gennaio del 1974, le cinque cifre sarebbero: 74A03.
Per le donne il numero che rappresenta la data di nascita è diverso, nel senso che viene aumentato di 40 ricadendo così in un range compreso tra 41 e 71. Questa trasformazione serve a indicare il sesso. Nel caso in cui la data di nascita sarà compresa tra 1 e 31, infatti, si tratterà di un uomo, in quello in cui la data sarà compresa tra 41 e 71, si tratterà di una donna.

Per indicare il comune di nascita vengono utilizzati i codici catastali, fatti di tre numeri e una lettera.
Se Carlo Bo fosse nato a Milano, il codice utilizzato sarebbe F205.

L’ultimo carattere è chiamato “carattere di controllo”, deriva da un sistema di calcolo complesso diviso in più fasi in cui ai primi 15 caratteri del codice vengono associati dei numeri che vengono poi sommati e la somma divisa per 26. Al risultato viene applicata un’ulteriore trasformazione in lettera che produce il codice di controllo.
 

Calfa_Soft

New Member
Licensed User
Qualche dubbio sul Codice Fiscale:

CODICE FISCALE, COM’E’ FATTO

Il codice fiscale è composto da 16 caratteri alfanumerici per le persone fisiche, mentre per le persone giuridiche, è composto da 11 caratteri. Per le associazioni riconosciute i caratteri sono 8, per quelle non riconosciute sono 9. Vediamo ora come viene composto il codice fiscale delle persone fisiche.
.....
Si, mi sono limitato a fare il controllo del check digit per le persone fisiche, demandando al controllo partita iva quello per le persone giuridiche, semplicemente per via del fatto che nel mio lavoro ho rapporti solamente con queste tipologie di soggetti. In ogni caso ogni spunto di miglioramento è positivo, grazie
 

Calfa_Soft

New Member
Licensed User
Top