Archive for agosto 2022

Calcolo del Check Digit di un Iban

Posted on 26 agosto 2022. Filed under: Senza categoria |

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

Posted on 24 agosto 2022. Filed under: Senza categoria |

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 )

Liked it here?
Why not try sites on the blogroll...