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