Convalida Partita IVA

Anonimo
2012-02-05T17:35:01+00:00

Ho una convalida difficile  ( almeno per me )

In una scheda anagrafica devo convalidare la partita Iva del fornitore.

Il DB  ( SQL2008 )  in questo campo:

__ Ha formato  varchar(20)

__ Non Ammette valori Null

__ Non Ammette valori duplicati  

La convalida di maschera di inserimento è piu rigida

__  ammette una stringa di 11  cifre  fra 0 e 9

__ ammette una stringa di 11 caratteri a scelta fra  , . _  ( virgola  punto  TrattinoBasso )

_________________________________________________________________________________

In pratica la maschera

Ammette per esempio:

25478935484

47896541258

___________

___,,,.....

Non ammette per esempio:

125sdft4789

458__87__44

,..._7.....

___g_______

_______________________________________________________________________________________

Io ho creato in maschera 2 campi calcolati con queste formule

=IIf(Mid([FoCfPI];1;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];2;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];3;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];4;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];5;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];6;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];7;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];8;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];9;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];10;1) In (",";"_");0;1)

+IIf(Mid([FoCfPI];11;1) In (",";"_");0;1)

=IIf(Mid([FoCfPI];1;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];2;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];3;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];4;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];5;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];6;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];7;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];8;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];9;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];10;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCfPI];11;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

Che mi restituiscono 0 se tutto va bene oppure più di 0 se qualcosa non va

( dove  FoCfPi  è il nome del controllo da controllare )

Poi con VBA verifico i 2 risultati e inserisco la Partita Iva se è corretta.

________________________________________________________________________________________________________

Il tutto funziona bene   Ma mi sembra troppo macchinoso

Come posso migliorare ?????

Grazie

_________________________________________________________________

NB Per curiosita comunico che la stringa di 11 , . _ serve a " inserire

un valore provvisorio di Partita Iva nel caso ( possibile ) che non sia noto

sul momento il valore corretto

In quanto il campo e Not null e non posso percio lasciarlo vuoto

e inserire una banale stringa di 11111111111 sembrava troppo stupido

e poi si confondeva con i valori corretti

______________________________________________________________

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2012-02-05T18:18:15+00:00

Ciao,

questa funzione, verifica anche che la partita iva sia formalmente corretta:

Public Function CheckPartitaIva(Piva As String) As Boolean

   'Autore: AntoGal

   'Accetta: Piva = la Partita IVA da verificare

   'Restituisce: true se la Partita IVA è corretta

   If Not Piva Like "###########" Then 'controlla che siano 11 cifre

      CheckPartitaIva = False

      Exit Function

   End If

   'verifica ultima cifra

   Dim i As Integer, SumDisp As Integer, SumPari As Integer, _

   Radd As Integer, SumTot As Integer, Check As Integer

   '1. si sommano le cifre di ordine dispari (in posizione 1,3,5,7,9)

   For i = 1 To 9 Step 2

      SumDisp = SumDisp + Val(Mid(Piva, i, 1))

   Next i

   '2. Si raddoppiano le cifre di ordine pari (in posizione 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 6: 1+5)

   For i = 2 To 10 Step 2

      Radd = 2 * Val(Mid(Piva, i, 1))

      If Radd > 9 Then

         Radd = Val(Left(CStr(Radd), 1)) + Val(Right(CStr(Radd), 1))

      End If

      SumPari = SumPari + Radd

   Next i

   '3. Si sommano tutti i precedenti risultati (delle cifre dispari e di

   'quelle pari raddoppiate come spiegato)

   '4. Si determina il totale delle due somme (delle pari e delle dispari).

   SumTot = SumPari + SumDisp

   '5. Del risultato, si prende solo la cifra delle unità

   '(es: se il risultato è 36, la cifra che ci interessa è 6)

   SumTot = SumTot Mod 10

   '6. Questa cifra si sottrae dal numero 10 (lo stabilisce l'art. 9 del

   'DM. del 23.12.1976 che regola l'attribuzione dei codici fiscali).

   Check = (10 - SumTot) Mod 10  'se viene 10 il check è 0

   'Il risultato è la cifra di controllo

   If Check = Val(Right(Piva, 1)) Then

      CheckPartitaIva = True

   Else

      CheckPartitaIva = False

   End If

End Function

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-02-05T19:06:16+00:00

    Questo è il massimo a cui potevo aspirare.

    Perfetto come al solito

    Grazie

    PS  apro un altra domanda per il Codive fiscale

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni