Newsgroup: it.comp.lang.visual-basic
Titolo: Calcolo del CIN in base a ABI CAB e Numero di conto corrente

Credo di fare cosa gradita a molti postando la funzione in oggetto,
che ho dovuto realizzare dato che non riuscivo a trovarla da nessuna
parte... Viene prima normalizzato il numero di conto (cioè trasformato
nel codice BBAN) e poi viene calcolato il CIN.
Non ho usato niente di particolare per cui, incollata in un modula vba
di Excel, dovrebbe essere utilizzabile tale e quale direttamente dai
fogli di lavoro...
Function CalcolaCin(ByVal strAbi As String, ByVal strCab As String,
ByVal strContoCorrente As String) As String
    'Calcolo del Cin in base a abi, cab e numero di conto corrente -
Visual Basic
    'Scritto da: Marco Brembati
    'Fonte algoritmo: European Committee for Banking Standards, Tr201
v3.2, July 2004
    '
    'Parametri d'ingresso:
    ' strAbi: codice ABI (numerico 4 o 5 cifre)
    ' strCab: codice CAB (numerico 4 o 5 cifre)
    ' strContoCorrente: numero di conto (alfanumerico)
    ' eventuali spazi o separatori vengono filtrati
    '
    'Esempio d'uso per verifica:
    '    ...
    '    myABI = "3210"
    '    myCAB = "1030"
    '    myCONTO = "12763.43"
    '    If Trim(myCin) <> "" Then 'Lo standard prevede che il CIN
possa essere lasciato bianco
    '     If myCin <> CalcolaCin(myABI, myCAB, myCONTO) Then
    '       MsgBox "Cin non valido!"
    '      End If
    '    End If
    '    ...
    ' V. 1.0
 
    ' costanti e variabili per calcolo pesi
    Const L_CONTO As Integer = 12
    Const L_ABI As Integer = 5
    Const L_CAB As Integer = 5
    Const NUMERI As String = "0123456789"
    Const LETTERE As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Const DIVISORE As Integer = 26
 
    Dim aListaPari() As Variant
    Dim aListaDispari() As Variant
    Dim strChar As String
    Dim strTemp As String
    Dim strContoNormalizzato As String
    Dim somma As Integer
    Dim k As Integer
    Dim i As Long
 
    aListaPari = Array(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)
    aListaDispari = 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)
    ' Conto normalizzato
    strTemp = ""
    For i = 1 To Len(strAbi)
        If InStr(1, NUMERI, Mid(strAbi, i, 1)) > 0 Then strTemp =
strTemp & Mid(strAbi, i, 1)
    Next
    strContoNormalizzato = strContoNormalizzato & Right(String(L_ABI,
"0") & strTemp, L_ABI)
    strTemp = ""
    For i = 1 To Len(strCab)
        If InStr(1, NUMERI, Mid(strCab, i, 1)) > 0 Then strTemp =
strTemp & Mid(strCab, i, 1)
    Next
    strContoNormalizzato = strContoNormalizzato & Right(String(L_CAB,
"0") & strTemp, L_CAB)
    strTemp = ""
    For i = 1 To Len(strContoCorrente)
        If InStr(1, NUMERI & LETTERE, Mid(strContoCorrente, i, 1)) > 0
Then strTemp = strTemp & Mid(strContoCorrente, i, 1)
    Next
    strContoNormalizzato = strContoNormalizzato &
Right(String(L_CONTO, "0") & strTemp, L_CONTO)
    ' Calcolo CIN
    somma = 0
    For k = 1 To (L_CONTO + L_ABI + L_CAB)
        strChar = Mid(strContoNormalizzato, k, 1)
        i = InStr(1, NUMERI, strChar)
        If (i <= 0) Then i = InStr(1, LETTERE, strChar)
        somma = somma + IIf(k Mod 2 = 0, aListaPari(i - 1),
aListaDispari(i - 1))
    Next
    CalcolaCin = Mid(LETTERE, 1 + (somma Mod DIVISORE), 1)
End Function

 Credo di fare cosa gradita a molti postando la funzione in oggetto...
Graditissima, anche se non serve a me :)
termoPilucco
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it