示例#1
0
        /// <summary>
        /// Obtient un numéro IBAN à partir d'un numéro RIB et d'un code de pays
        /// </summary>
        /// <param name="rib">Le numéro RIB</param>
        /// <param name="countryCode">Le code du pays (par exemple "FR" pour la France)</param>
        /// <returns>Le numéro IBAN correspondant au RIB et au code pays spécifiés</returns>
        public static string FromRIB(string rib, string countryCode)
        {
            var clean      = BankingCommon.CleanInput(rib);
            var onlyDigits = ReplaceLetters(clean + countryCode + "00");
            var modulo     = MathHelper.Modulo(onlyDigits, 97);

            return(string.Format("{0}{1:00}{2}", countryCode, 98 - modulo, clean));
        }
示例#2
0
        /// <summary>
        /// Vérifie la validité d'un RIB
        /// </summary>
        /// <param name="number">Le RIB à vérifier</param>
        /// <returns>true si le RIB est valide, false sinon</returns>
        public static bool Check(string number)
        {
            // Suppression des espaces et tirets
            string tmp = BankingCommon.CleanInput(number);

            // Vérification du format BBBBBGGGGGCCCCCCCCCCCKK
            // B : banque
            // G : guichet
            // C : numéro de compte
            // K : clé RIB

            Match m = ribRegex.Match(tmp);

            if (!m.Success)
            {
                return(false);
            }

            // Extraction des composants
            string b_s = m.Groups["B"].Value;
            string g_s = m.Groups["G"].Value;
            string c_s = m.Groups["C"].Value;
            string k_s = m.Groups["K"].Value;

            // Remplacement des lettres par des chiffres dans le numéro de compte
            StringBuilder sb = new StringBuilder();

            foreach (char ch in c_s)
            {
                if (char.IsDigit(ch))
                {
                    sb.Append(ch);
                }
                else
                {
                    sb.Append(RibLetterToDigit(ch));
                }
            }
            c_s = sb.ToString();

            // Séparation du numéro de compte pour tenir sur 32bits
            string d_s = c_s.Substring(0, 6);

            c_s = c_s.Substring(6, 5);

            // Calcul de la clé RIB
            // Algo ici : http://fr.wikipedia.org/wiki/Clé_RIB#Algorithme_de_calcul_qui_fonctionne_avec_des_entiers_32_bits

            int b = int.Parse(b_s);
            int g = int.Parse(g_s);
            int d = int.Parse(d_s);
            int c = int.Parse(c_s);
            int k = int.Parse(k_s);

            int calculatedKey = 97 - ((89 * b + 15 * g + 76 * d + 3 * c) % 97);

            return(k == calculatedKey);
        }
示例#3
0
        /// <summary>
        /// Vérifie la validité d'un numéro IBAN
        /// </summary>
        /// <param name="number">Numéro IBAN à vérifier</param>
        /// <returns>true si le numéro est valide, false sinon</returns>
        public static bool Check(string number)
        {
            var clean      = BankingCommon.CleanInput(number);
            var rotated    = clean.Substring(4) + clean.Substring(0, 4);
            var onlyDigits = ReplaceLetters(rotated);
            var modulo     = MathHelper.Modulo(onlyDigits, 97);

            return(modulo == 1);
        }
示例#4
0
 /// <summary>
 /// Renvoie un numéro RIB à partir d'un numéro IBAN
 /// </summary>
 /// <param name="iban">Numéro IBAN à convertir en RIB</param>
 /// <returns>Le numéro RIB correspondant au IBAN spécifié</returns>
 public static string FromIBAN(string iban)
 {
     return(BankingCommon.CleanInput(iban).Substring(4));
 }