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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace GestionLMB.Model
{
public class Rib
{
public int codeBanque { get; set; }
public int codeGuichet { get; set; }
public string numCompte { get; set; }
public int clefRib { get; set; }
public string banque { get; set; }
/// <summary>
/// Instancie un Rib, qui sera rattaché à un client ou à un Site.
/// </summary>
/// <param name="codeBanque">int</param>
/// <param name="codeGuichet">int</param>
/// <param name="numCompte">string</param>
/// <param name="cleRib">int</param>
/// <param name="banque">string</param>
public Rib(int codeBanque, int codeGuichet, string numCompte, int clefRib, string banque)
{
this.codeBanque = codeBanque;
this.codeGuichet = codeGuichet;
this.numCompte = numCompte;
this.clefRib = clefRib;
this.banque = banque;
}
/// <summary>
/// Vérifie la validité d'un RIB
/// </summary>
/// <param name="rib">Rib</param>
/// <returns>bool</returns>
public bool IsValidRib()
{
return (this.clefRib == this.getClefRib());
}
public int getClefRib()
{
string numCompte = null;
// Remplacement des lettres par des chiffres dans le numéro de compte
StringBuilder sb = new StringBuilder();
foreach (char ch in this.numCompte.ToUpper())
{
if (char.IsDigit(ch))
sb.Append(ch);
else
sb.Append(RibLetterToDigit(ch));
}
numCompte = sb.ToString();
// Séparation du numéro de compte pour tenir sur 32bits
string numCompte_deb = numCompte.Substring(0, 6);
string numCompte_fin = numCompte.Substring(6, 5);
// Calcul de la clé RIB
int d = int.Parse(numCompte_deb);
int c = int.Parse(numCompte_fin);
int calculatedKey = 97 - ((89 * this.codeBanque + 15 * this.codeGuichet + 76 * d + 3 * c) % 97);
return calculatedKey;
}
/// <summary>
/// Convertit une lettre d'un RIB en un chiffre selon la table suivante :
/// 1 2 3 4 5 6 7 8 9
/// 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
/// </summary>
/// <param name="c">La lettre à convertir</param>
/// <returns>Le chiffre de remplacement</returns>
private char RibLetterToDigit(char letter)
{
if (letter >= 'A' && letter <= 'I')
{
return (char)(letter - 'A' + '1');
}
else if (letter >= 'J' && letter <= 'R')
{
return (char)(letter - 'J' + '1');
}
else if (letter >= 'S' && letter <= 'Z')
{
return (char)(letter - 'S' + '2');
}
else
throw new ArgumentOutOfRangeException("Le caractère à convertir doit être une lettre majuscule dans la plage A-Z");
}
}
} |