Newsgroup: it.comp.lang.visual-basic
Titolo: Controllo Partita Iva

Salve, tempo fò avevo trovato un articolo relativamente ai controlli da
eseguire per determinare la validità della partita IVA. Stranamente in base
a tali criteri mi determina come errata una partita Iva che certamente è
esatta. Da un ricerca fatta anche su vecchi post penso che il problema sia
con il codice di controllo = 10.
Qualcuno sa con certezza il criterio da adottare o doce reperire la routine
grazie

 ha scritto nel messaggio
news:5bdu9.75846$%M1.19...@twister2.libero.it...

Potresti scrivere qui la partita IVA, per favore.
Se la mia routine non la sbaglia la posto.
PS: Per stessa ammissione del Min. alcune PI (e CF) sono sbagliate.

 Qualcuno sa con certezza il criterio da adottare o doce reperire la
routine
Il seguente e' il codice Delphi estratto da una mia applicazione.
Puoi adattarlo facilmente:
function VerificaPartitaIVA(PartitaIVA: String): Boolean;
var
  I: Integer;
  Somma: Integer;
  Cifre: array [1..11] of Integer;
  K: Integer;
begin
  PartitaIVA := Trim(PartitaIVA);
  if Length(PartitaIVA) <> 11 then
  begin
    Result := false;
    Exit;
  end;
  for I := 1 to Length(PartitaIVA) do
  begin
    if not (PartitaIVA[I] in ['0'..'9']) then
    begin
      Result := false;
      Exit;
    end;
  end;
  for I := 1 to 11 do
  begin
    Cifre[I] := Ord(PartitaIVA[I]) - Ord('0');
  end;
  Somma := Cifre[1] + Cifre[3] + Cifre[5] + Cifre[7] + Cifre[9];
  I := 2;
  while (I <= 10) do
  begin
    K := 2 * Cifre[I];
    if K > 9 then K := K - 9;
    Somma := Somma + K;
    Inc(I, 2);
  end;
  Result := ((10 - Somma mod 10) mod 10) = Cifre[11];
end;
--------------------------------
Inviato via 
http://usenet.libero.it

 ha scritto nel messaggio
news:5bdu9.75846$%M1.19...@twister2.libero.it...

Una vocina (alcuni vecchi post) mi dicono che c'è qualcosa sul sito comune
www.it-lang-vb.net
Salutoni
Sergio

 ha scritto nel messaggio
news:Lhdu9.75872$%M1.19...@twister2.libero.it...


 07175691000
A me la segnala corretta.Ecco la mia Function:
'-------------------------
Function VERIFICA_PARTITA_IVA(partita_iva, Optional codice_iso = "IT")
    Dim intero As Integer
    errata = 1
    Select Case UCase(codice_iso)
        Case "IT"   'Italia
            Do
                If Len(partita_iva) <> 11 Then Exit Do      'Non e' lunga 11
                If VERIFICA_CARATTERI(partita_iva, "C") Then Exit Do    'Non
contiene solo cifre
'                ^^^^^^ Funzione (non qui pubblicata) che restituisce True
se vi sono crt diversi da "0" a "9"
'                   Moltiplica per 2 le cifre pari e accoda risultati in
stringa
'                   Nel contempo accoda invariate le cifre in posizione
dispari
                stringa = ""
                For intero = 1 To 10
                    If (intero Mod 2) Then
                        stringa = stringa + Mid(partita_iva, intero, 1)
'Pos.dispari
                    Else
                        stringa = stringa + Mid(Str((Asc(Mid(partita_iva,
intero, 1)) - 48) * 2), 2)
                    End If
                Next intero
'                   Totalizza in somma tutte le cifre di stringa
                somma = 0
                For intero = 1 To Len(stringa)
                    somma = somma + Asc(Mid(stringa, intero, 1)) - 48
                Next intero
'                   Ricava in somma solo ultima cifra di se stesso
                somma = (somma Mod 10)
'                   Verifica carattere di controllo
                If somma = 0 Then somma = 10    'Perche' complemento a 10
sia 0
                If Val(Right(partita_iva, 1)) = (10 - somma) Then errata = 0
                Exit Do
            Loop
        Case "AT"   'Austria
            If Len(partita_iva) = 9 Then
                If UCase(Left(partita_iva, 1)) = "U" Then
                    errata = 0
                End If
            End If
        Case "BE", "DE", "PT", "ES"         'Belgio, Germania, Portogallo,
Spagna
            If Len(partita_iva) = 9 Then errata = 0
        Case "DK", "FI", "EL", "IE", "LU"   'Danimarca, Finlandia, Grecia,
Irlanda, Lussemburgo
            If Len(partita_iva) = 8 Then errata = 0
        Case "FR"   'Francia
            If Len(partita_iva) = 11 Then errata = 0
        Case "GB"   'Gran Bretagna
            Select Case Len(partita_iva)
                Case 5, 9, 12
                    errata = 0
            End Select
        Case "SE"   'Svezia
            If Len(partita_iva) = 12 Then errata = 0
        Case "SM"   'San Marino
            If Len(partita_iva) = 5 Then errata = 0
    End Select
    VERIFICA_PARTITA_IVA = errata
End Function

Ehm, come da mio post del 09-10-02 (10:41), mai considerato (sob), nessuno
sa come controllare la congruenza dei caratteri per le partite IVA Europee
(UE)?

 ha scritto nel messaggio
news:9udu9.75472$RO.19...@twister1.libero.it...


 Grazie 1000, tutto OK
Fammi capire: Tutto OK perchč la mia passa anche quelle sbagliate oppure hai
trovato l'errore nella tua?

 Grazie 1000, tutto OK
Lo sai che postare 4K di roba per dire "grazie 1000 tutto ok" č moralmente
errato, vero?
Si usa citare, tagliando il piů possibile quello che il Newsreader mette per
integrale pur mantenendo la comprensione del discorso.
Il mio č un invito, non una predica, ben inteso.
:-)

tutto Ok in quanto la tua mi ha fatto trovare l'errore sulla mia.
Il problema era nel caso che il codice di controllo era =0. di nuovo grazie