Archive for agosto 2022
Calcolo del Check Digit di un Iban
Terzo e ultimo articolo della serie dedicata ai codici Iban.
In questo articolo vedremo come calcolare il Check Digit di un codice Iban.
Avendo già codice Abi, codice Cab e numero di conto corrente, abbiamo visto nell’articolo https://pieer11.wordpress.com/2022/08/24/calcolo-del-codice-cin-in-un-iban/ come calcolare il codice CIN.
Con questi codice dobbiamo prima mettere il “IT00” alla fine (00 perché ancora non è conosciuto)
Dobbiamo quindi cambiare il codice CIN e IT in un valore numerico, dove A corrisponde a 10, B corrisponde a 11 e così via.
Alla fine otteniamo un numero intero di circa 30 cifre.
Su questo numero dobbiamo ottenere il resto della divisione per 97, che sottratto a 98 ci darà il numero da mettere dopo l’IT.
Il codice in VB.NET è questo
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim abi As String = "01005"
Dim cab As String = "01613"
Dim cc As String = "000000003712"
Dim CIN As String = CalcolaCin(abi, cab, cc)
Dim EUROcIN As String = CalcolaEuroCin(CIN, abi, cab, cc, "IT00")
MessageBox.Show("Il tuo Codice di controllo: " & EUROcIN )
End Sub
Private Function CalcolaEuroCin(cIN As String, abi As String, cab As String, cc As String, v As String) As String
Dim bban As String = cIN + abi + cab + cc + v
Dim sban As String = ""
Dim alfa() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
For Each adigit In bban
If IsNumeric(adigit) = False Then
Dim p = 0
For Each achar In alfa
p = p + 1
If adigit = achar Then
cc = p + 9
sban = sban & cc
End If
Next
Else
cc = adigit
sban = sban & cc
End If
Next
Dim ci = Mod97(sban)
Dim resto = 98 - ci
Return resto
End Function
Function Mod97(ByVal vIban)
Dim i, m, digit
m = 0
For i = 1 To Len(vIban)
digit = CInt(Mid(vIban, i, 1))
m = (10 * m + digit) Mod 97
Next
Mod97 = m
End Function
ed ecco la finestra con il codice.

Infine possiamo quindi calcolare l’IBAN.
MessageBox.Show("IL TUO CODICE IBAN: " & "IT" & EUROcIN & CIN & abi & cab & cc)

Attenzione che questa procedura funziona solo pe gli IT, ma volendo lo si può personalizzare per altre nazioni, sapendo come è composto l’Iban in ciascuna nazione.
Ad esempio per la Germania, aggiungete quest4e righe all’inizio della funzione CalcolaEuroCin:
cin = "10010010"
abi = ""
cab = ""
cc = "0987654321"
v = "DE00"
Risulterà un codice di controllo equivalente a 29.
L’Iban sarà quindi: DE29100100100987654321. L’importante è sapere il numero di caratteri per il controllo e il numero di caratteri per il conto.
Ho finito questa parte, e dal prossimo articolo si tornerà a parlare di fisica dell’atmosfera, leggi sulla termodinamica e relative formule.
Leggi l'articolo intero | Make a Comment ( None so far )Calcolo del Codice CIN in un IBAN
Dal mio ultimo articolo su https://pieer11.wordpress.com/2022/07/06/controllo-delliban/ proseguiamo a calcolare il codice CIN per poi calcolare, in un altro articolo, l’IBAN.
Dati ABI, CAB e CC possiamo ottenere il codice CIN tramite posizione del numero.
Tramite ciclo for to next e array, possiamo in un attimo scrivere e ottenere il codice.
Per le posizioni dispari abbiamo questo array
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 27 28 26
mentre per le posizioni pari:
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 26 27 28
Ad esempio, il mio IBAN è composto da ABI CAB e CC:
0100501613000000003712
Scorriamo da sinistra a destra. Partendo da zero e partendo dalla prima posizione (per forza sarà dispari) otteniamo:
posizione dispari di 0 = 1
posizione pari di 1 = 1
posizione dispari di 0 = 1
posizione pari di 0 = 0
posizione dispari di 5 = 13
posizione pari di 0 = 0
posizione dispari di 1 = 0
posizione pari di 6 = 6
posizione dispari di 1 = 0
posizione pari di 3 = 3
posizione dispari di 0 = 1
posizione pari di 0 = 0
posizione dispari di 0 = 1
posizione pari di 0 = 0
posizione dispari di 0 = 1
posizione pari di 0 = 0
posizione dispari di 0 = 1
posizione pari di 0 = 0
posizione dispari di 3 = 7
posizione pari di 7 = 7
posizione dispari di 1 = 0
posizione pari di 2 = 2
Facciamo ora la somma e otteniamo 45. Dobbiamo dividere ora per 26 e ottenere il resto. In questo caso fa 19.
A quale lettera dell’alfabeto corrisponde il numero 19? A=1, B=2, C=3 etc etc.
19 è la lettera T, quindi il CIN corrisponde a T.
Ecco il codice da inserire in evento click del pulsante:
Dim abi As String = "01005"
Dim cab As String = "01613"
Dim cc As String = "000000003712"
Dim CIN As String = CalcolaCin(abi, cab, cc)
MessageBox.Show("IL TUO CODICE CIN: " & CIN)
E il codice che calcola uk CIN:
Private Function CalcolaCin(abi As String, cab As String, cc As String) As String
Dim checkiban As String = abi & cab & cc
Dim alfa() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
Dim posdis() As Integer = {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, 27, 28, 26}
Dim pospar() As Integer = {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, 26, 27, 28}
Dim ri As Integer = 0
Dim cr = 0
Dim cs = 0
Dim resto = 0
Dim i = 0
For Each p In checkiban
i = i + 1
If IsNumeric(p) = True Then
'CARATTERE NUMERICO
If i Mod 2 = 1 Then
'POSIZIONE DISPARI
'MessageBox.Show("DISPARI")
cs = cs + posdis(Val(p))
Else
'POSIZIONE PARI
'MessageBox.Show("PARI")
cs = cs + pospar(Val(p))
End If
Else
'CARATTERE ALFANUMERICO
End If
Next
ri = Fix(cs / 26)
cr = 26 * ri
resto = cs - cr
Return alfa(resto)
End Function

Semplice, no?
Arrivederci al prossimo articolo.
Leggi l'articolo intero | Make a Comment ( None so far )