Su richiesta di qualcuno che me l'ha chiesto esemplifico il calcolo del Cin del bollettino freccia.
Il bollettino freccia è il sostituto del bollettino postale introdotto dalle banche come forma alternativa di pagamento.
I campi necessari per il calcolo del cin del bollettino freccia sono i seguenti
Campo | Componenti | Lunghezza | Note |
Importo | 9 | Importo * 100 senza decimali con zeri significativi nessun segno solo importi positivi | |
Cin importo | 1 | Vedi formula | |
Identificativo pagamento | 21 | ||
Codice Sia | 5 | Attribuito dalla banca all'azienda cliente | |
Riferimento | 16 | Riferimento univoco al documento | |
Cin intermedio | 1 | Vedi formula | |
IBAN | 27 | ||
Codice paese | 2 | previsti IT e SM | |
CIN IBAN | 2 | Vedi calcolo CIN IBAN | |
CIN BBAN | 1 | Vedi calcolo CIN BBAN | |
ABI | 5 | Codice Abi cliente | |
CAB | 5 | Codice Cab cliente | |
CC | 12 | Numero conto corrente cliente | |
Codice esenzione | 1 | Valore fisso = 1 | |
Codice Divisa | 1 | Valore fisso = E | |
Cin complessivo | 1 | Calcolato su tutti i campi precedenti |
I caratteri ammessi per i campi alfanumerici sono tutti i 26 caratteri maiuscoli i caratteri cioè presenti nella tabella ASCII da 65 a 90 compresi più i 10 caratteri da 0 a 9 compresi.
Rimando alla consultazione del mio blog per il calcolo del CIN del BBAN e dell'IBAN.
Formula del Cin Freccia
Il calcolo è abbastanza lineare (in pseudocodice):
Per ogni carattere contenuto nel codice da cui calcolare il cin
Si accumula il valore ascii moltiplicato per la posizione relativa del carattere nel codice partendo da sinistra (Esempio con un codice A1 la somma diventa 65 * 1 + 49 * 2).
Si calcola il resto della divisione intera per 36 (funzione modulo) + 1
Con quest'ultimo valore si ottiene il carattere "puntato" come sottostringa di: Z0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
La funzione in C#
private static string CalcolaCin(string valore)
{
if ((valore == string.Empty) || (valore == null))
{
throw new Exception("Valore non ammesso");
}
string lettere = "Z0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int somma = 0;
int i = 0;
for (int k = 0; k < valore.Length; k++)
{
char c = valore.Substring(k,1).ToCharArray()[0];
somma += (int) c * (k + 1);
}
i = (somma % 36);
return lettere.Substring(i,1);
}
Esempio di calcolo con C#
Esempio di calcolo con VB.NET
Libreria comune da referenziare
4 commenti:
quello che stavo cercando, grazie
La ringrazio per Blog intiresny
Si, probabilmente lo e
Purtroppo i link portano su un archivio vuoto. E' possibile avere i file?
Grazie
Posta un commento