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 ... 
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
ovviamente qualsiasi miglioramento ecc è gradito, così come le osservazioni e perché no anche le critiche
Fabio Calzeroni - Calfasoft
			
			
			
				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 Subovviamente qualsiasi miglioramento ecc è gradito, così come le osservazioni e perché no anche le critiche
Fabio Calzeroni - Calfasoft
 
				 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		