/// <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)); }
/// <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); }
/// <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); }
/// <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)); }