Jun
25
2010

Calculer une clef RIB

Les RIB... Ces documents que l'on nous demande souvent sans jamais en avoir sous la main au moment opportun... Quelle galère ! Pour ma part, je garde toujours dans mon portefeuille une preuve de dépôt de chèques. Problème, il n'y a pas la clef RIB dessus. Heureusement, il est facile de la calculer, cette valeur permettant simplement de vérifier la validité du numéro de compte.

Définition de la clef RIB

La clef RIB est, par définition, le reste de la division euclidienne du nombre correspondant au code banque, au code guichet et au numéro de compte. Ce nombre, noté R, peut se décomposer comme suit :

R = B.10^{18} + G.10^{13} + C.10^2

Où :

  • B est le code banque, sur 5 chiffres,
  • G est le code guichet, sur 5 chiffres,
  • C est le compte banque, sur 11 chiffres

On démarre directement par les centaines (dix puissance deux) car la clef RIB tient sur deux chiffres (un modulo 97 ne peut être supérieur ou égal à 97).

La formule de calcul d'une clef RIB est donc :

K = 97 - ( B.10^{18} + G.10^{13} + C.10^2 ) [mod 97]

Un numéro de compte peut comporter des lettres. Dans ce cas, il faut appliquer la correspondance 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

Calcul de la clef RIB

Si on veut calculer cette clef par programmation (la calculer à la main étant impensable, à moins d'avoir quelques tendances masochistes), il nous faudra modifier cette formule. En effet, le premier terme de cette somme est en puissance 18, ce qui dépasse amplement la taille maximum d'une entier (même non signé) codé sur 32 bits.

2^{32} = 4294967296 approx 4.10^{9} < < 10^{18}

La solution ? Appliquer déjà le modulo sur les puissances de 10, et après seulement faire le calcul. Pour ce faire, il est utile de rappeler deux propriétés des modulos :

  1. Le modulo d'une somme est égal au modulo de la somme des modulos.
  2. Le modulo d'un produit est égal au modulo du produit des modulos.

a * b [n] = ( a[n] * b[n] ) [n]

On applique cette formule dans notre cas :

B.10^{18} = (B[97] * 10^{18}[97])[97]

B.10^{18} = (B[97] * 89) [97]

En procédant de même pour les autres termes de l'addition, on obtient :

G.10^{13} = (G[97] * 15) [97]

C.10^{7} = (C[97] * 3)[97]

On en déduit donc la nouvelle formule de calcul de notre clef RIB :

K = 97 - ( B.10^{18} + G.10^{13} + C.10^2 ) [97]

K = 97 - ( 89 * B[97] + 15 * G[97] + 3 * C [97] ) [97]

Or, si on applique la propriété de la somme des modulos de nouveau, on a bien :

K = 97 - (89B + 15G + 3C)[97]

Ce qui se calcule à présent très aisément, que ce soit en Javascript ou dans tout autre langage. Voir même à la calculatrice. :)

Code banque (B) Code guichet (G) Numéro de compte (C) Clef RIB (K)

[script type="text/javascript"]
$(".input").change(function(e) {

var key = 89 * $('#B').attr("value");
key += 15 * $('#G').attr("value");
key += 3 * $('#C').attr("value");
key = key % 97;
key = 97 - key;

$('#rib').text(key);

});
[/script]

Pour les plus curieux d'entre vous, le code correspondant est (en JQuery) :

$(".input").change(function(e) {

	var key = 89 * $('#B').attr("value");
	    key += 15 * $('#G').attr("value");
	    key += 3 * $('#C').attr("value");
  	    key = key % 97;
	    key = 97 - key;

	$('#rib').text(key);

});

Tout simplement. Sachant que seuls les éléments de mon formulaire de calcul de clef RIB ont la classe input.

Libre à vous de l'implémenter dans vos propres programmes. :)

3 Comments + Add Comment

  • Et la sécurité dans tout ca ?

    Enfin bon c'est bien fichu quand même. Testé et approuvé ! :)

  • Je trouve quand même que c'est plus simple de garder un exemplaire dans son porte-feuille ;)

  • Désolée, je commente un article qui a 1 an, je ne vois pas le souci ! Hihi...

Leave a comment