Altroopen sourceTech notes

Calcolo dei check digits (CIN Europeo) su IBAN in Python

python programming programmazione da zero python

In questo articolo avevamo visto come calcolare il codice CIN dall’iban, ora vediamo, sempre grazie alle informazioni dettagliate sull’algoritmo, che troviamo a questo indirizzo:

http://www.artico.name/soft/iban/wiban.htm a cura di Giuliano Artico, come calcolare i due check digits (codice detto anche CIN Europeo), sempre grazie a python, ipotizziamo in questo caso di avere già il cin, l’abi, il cab e il numero di conto:

 

    #Il codice BBAN (Basic Bank Account Number) è un codice internazionale che contiene le coordinate bancarie nazionali.
    #In Italia esso è lungo 23 caratteri ed è costituito dal semplice accostamento di CIN, ABI, CAB e conto corrente. 

    #1 A destra del codice BBAN si aggiunge la stringa IT00.
    bban = cin + abi + cab + cc + "IT00"
    print "BBAN:%s" % (bban)

    #2 Nella stringa così ottenuta si sostituiscono i caratteri alfabetici con un numero di due cifre ottenuto dalla posizione della lettera nell'alfabeto a cui va sommato 9. 
    #Così, ad esempio, A diventa 10, B diventa 11, C diventa 12 e così via fino a Z, che diventa 35.
    sban = ''
    for adigit in bban:
        p = 0
        if adigit in alfa:
            for achar in alfa:
                p = p +1
                if adigit==achar:
                    cc = p + 9
        else:
            cc = adigit
        sban = sban + str (cc)
    
    #3 In questo modo si ottiene un numero di almeno 30 cifre e si considera il resto della divisione fra tale numero e 97. Il resto di tale divisione è un numero compreso fra 0 e 96.
    ci = int(sban) % 97
    resto = 98 - ci

    #4 Infine il resto ottenuto al punto 3 va sottratto da 98 e si ottiene così il codice desiderato, che è un numero compreso fra 2 e 98.
    #se il numero è di una sola cifra, occorre anteporre uno zero (così si hanno sempre due caratteri, cioè 02, 03 fino a 09), per fare questo utilizziamo la funzione zfill. 
    print "CHECK DIGITS:%s" % (str(resto).zfill(2))

Comment here