- Basic Bank Account Number
-
Pour les articles homonymes, voir RIB (homonymie).
Le BBAN est une subdivision locale de l'IBAN délivré par la banque et que l'on remet à un débiteur ou un créancier dans le but d'opérer des virements bancaires ou des prélèvements bancaires à partir d'un compte courant. On trouve souvent un RIB à la fin des carnets de chèques ou en tête du relevé de compte.
On utilise parfois les appellations :
- RIB pour relevé d'identité bancaire en France,
- RICE pour relevé d'identité Caisse d'épargne
Sommaire
Composition
Composition du BBAN 3 à 12 positions 8 à 20 positions IID BAN - IID : Identification de l’établissement financier
- BAN : Numéro de compte bancaire
Il n'a pas plus de 30 positions. Chaque pays est en charge de définir le format de son BBAN.
Exemples
- France (23 caractères) Format : BBBBBGGGGGCCCCCCCCCCCRR
-
- B = code banque (5 chiffres), G = code guichet (5 chiffres), C = numéro de compte (11 chiffres et/ou lettres), R = clé RIB (2 chiffres entre 01 et 97)
- Belgique (9 chiffres) Format : BBB-NNN NNNN-CC
-
- CC = BBBNNNNNNN modulo 97
Clef RIB
Clé = 97 - ( (concaténation de banque-guichet-compte)*100 modulo 97)[1]. Si le compte comporte des lettres (codes banques français 20041, Banque Postale, ou 30002, Crédit Lyonnais), remplacer la lettre par son index de 1 à 9 dans l'alphabet (A=1 ... I=9,J=1, etc.) et en laissant un espace entre R et S.
Pour plus de détails, voir l'article Wikipedia: Clé RIB.
Le chéquier
Le relevé d'identité bancaire, sur le carnet de chèque, est composé de :
- l'International Banking Account Number (IBAN), numéro de compte à la norme internationale ISO n° 13616
- le Bank Identification Code (BIC), identifiant de l'établissement financier (la banque) à la norme internationale ISO n° 9362
- le nom et l'adresse du titulaire du compte, en date d'établissement du carnet de chèque (les chèques restant valides après déménagement)
- le nom de l'établissement financier (la banque) et du guichet de domiciliation (l'agence)
Vérification du RIB
Algorithme
La validité d'un RIB se calcule grâce à la clé de celui-ci.
La première étape consiste à remplacer les lettres présentes par des chiffres pour faciliter le calcul.
Tableau de transformation des caractères Caractère Chiffre représentant 0 0 1, A, J 1 2, B, K, S 2 3, C, L, T 3 4, D, M, U 4 5, E, N, V 5 6, F, O, W 6 7, G, P, X 7 8, H, Q, Y 8 9, I, R, Z 9 Pour faire la transformation, il suffit de se placer en base 36 (base 10 + 26 lettres) et d'appliquer le calcul suivant sur chaque caractère (transformé en nombre currentCharValue) puis de remplacer le sélectionné par le nombre donné :
L'étape suivante (facultative) consiste à décomposer le code et multiplier chaque partie par une constante et en faire la somme. Enfin, le code est correct si le nombre obtenu (soit par simple concaténation de nos differentes parties, soit par décomposition) est congru à 0 modulo 97.Algorithme de vérification en PHP
La fonction check_rib retourne vrai ou faux en fonction de la validité des informations.
function check_rib($cbanque, $cguichet, $nocompte, $clerib) { $tabcompte = ""; $len = strlen($nocompte); if ($len != 11) { return false; } for ($i = 0; $i < $len; $i++) { $car = substr($nocompte, $i, 1); if (!is_numeric($car)) { $c = ord($car) - (ord('A') - 1); $b = ($c + pow(2, ($c - 10)/9)) % 10; $tabcompte .= $b; } else { $tabcompte .= $car; } } $int = $cbanque . $cguichet . $tabcompte . $clerib; return (strlen($int) >= 21 && bcmod($int, 97) == 0); }
Algorithme de vérification en Java
import java.math.BigDecimal; public class Validation{ public boolean checkRib(String rib) { StringBuilder extendedRib = new StringBuilder(rib.length()); for (char currentChar : rib.toCharArray()) { //Works on base 36 int currentCharValue = Character.digit(currentChar, Character.MAX_RADIX); //Convert character to simple digit extendedRib.append(currentCharValue<10?currentCharValue:(currentCharValue + (int) StrictMath.pow(2,(currentCharValue-10)/9))%10); } return new BigDecimal(extendedRib.toString()).remainder(new BigDecimal(97)).intValue() == 0; } }
Algorithme de vérification en Ruby
Avec :
- rib : le RIB complet sans espace à passer à la méthode.
def rib?(rib) bank, office, account, key = rib.match(/^(\d{5})(\d{5})(\d{11})(\d{2})$/).captures account = account.each_char.inject('') do |sum, char| char = char.to_i 36 sum += ((char + 2 ** ((char - 10)/9)).to_i % 10).to_s end result = bank + office + account + key result.size >= 21 && result.to_i % 97 == 0 rescue # Le RIB n’est pas valide false end
Algorithme de vérification en Perl
Avec :
- $cbanque : code de la banque
- $cguichet : code du guichet
- $nocompte : numéro de compte
- $clerib : clé rib
use Math::BigInt; my %letter_substitution = ("A" => 1, "B" => 2, "C" => 3, "D" => 4, "E" => 5, "F" => 6, "G" => 7, "H" => 8, "I" => 9, "J" => 1, "K" => 2, "L" => 3, "M" => 4, "N" => 5, "O" => 6, "P" => 7, "Q" => 8, "R" => 9, "S" => 2, "T" => 3, "U" => 4, "V" => 5, "W" => 6, "X" => 7, "Y" => 8, "Z" => 9); my $tabcompte = ""; my $len = length($nocompte); return 0 if ($len != 11); for (my $i = 0; $i < $len; $i++) { my $car = substr($nocompte, $i, 1); if ($car !~ m/^\d$/) { my $b = $letter_substitution{uc($car)}; my $c = ( $b + 2**(($b - 10)/9) ) % 10; $tabcompte .= $c; } else { $tabcompte .= $car; } } my $int = "$cbanque$cguichet$tabcompte$clerib"; return (length($int) >= 21 && Math::BigInt->new($int)->bmod(97) == 0) ? 1 : 0;
Requete de vérification du dossier RIB par calcul de la clé RIB
renseigner les codes Banque et Guichet ainsi que le numéro de compte à l'exécution de la requête SQL.
SELECT Saisie.* ,97-MOD(Banque*89+Guichet*15+Compte*3,97) CleRIB FROM (SELECT substr(lpad(&Banque,5,'0'),1,5) Banque ,substr(lpad(&Guichet,5,'0'),1,5) Guichet ,translate(UPPER(substr(lpad('&Compte',11,'0'),1,11)) ,'ABCDEFGHIJKLMNOPQRSTUVWXYZ' , 12345678912345678923456789 ) Compte FROM dual ) Saisie;
Conversion du RIB en IBAN
Algorithme
Etape 1 : Créer un IBAN temporaire, composé du code du pays : FR pour la France, suivi de " 00 " et du " code RIB "
Etape 2 : Déplacer les 4 premiers caractères de l’IBAN vers la droite du numéro.
Etape 3 : Convertir les lettres en chiffres, selon le principe "A" vaut "10" ... "Z" vaut "35".
Etape 4 : Calculer le modulo 97 et retrancher le reste de 98. Si le résultat comporte un seul chiffre, insérer un zéro devant. Insérer le résultat ainsi obtenu à la position 3 de l’IBAN temporaire créé dans l’étape 1.
Algorithme de conversion du RIB en IBAN en PHP
function Rib2Iban($codebanque,$codeguichet,$numerocompte,$cle){ $charConversion = array("A" => "10","B" => "11","C" => "12","D" => "13","E" => "14","F" => "15","G" => "16","H" => "17", "I" => "18","J" => "19","K" => "20","L" => "21","M" => "22","N" => "23","O" => "24","P" => "25","Q" => "26", "R" => "27","S" => "28","T" => "29","U" => "30","V" => "31","W" => "32","X" => "33","Y" => "34","Z" => "35"); $tmpiban = strtr(strtoupper($codebanque.$codeguichet.$numerocompte.$cle)."FR00",$charConversion); // Soustraction du modulo 97 de l'IBAN temporaire à 98 $cleiban = strval(98 - intval(bcmod($tmpiban,"97"))); if (strlen($cleiban) == 1) $cleiban = "0".$cleiban; return "FR".$cleiban.$codebanque.$codeguichet.$numerocompte.$cle; }
Algorithme de conversion du RIB en IBAN en Ruby
Avec :
- rib : le RIB complet sans espace à passer à la méthode.
def rib_to_iban(rib) tmp_iban = "#{rib}FR00".each_char.inject('') do |sum, char| sum += char.to_i(36).to_s end.to_i key = 98 - (tmp_iban % 97) "FR%.2d%s" % [key, rib] end
Articles connexes
Liens externes
Références
- À rapprocher de la clé du numéro de Sécurité Sociale française, qui ne multiplie pas par 100.
Wikimedia Foundation. 2010.