diff --git a/htdocs/compta/bank/account.class.php b/htdocs/compta/bank/account.class.php index dc584a0276f..0eda2240767 100644 --- a/htdocs/compta/bank/account.class.php +++ b/htdocs/compta/bank/account.class.php @@ -186,7 +186,7 @@ class Account // Chargement librairie pour acces fonction controle RIB require_once DOL_DOCUMENT_ROOT . '/compta/bank/bank.lib.php'; - if (! verif_rib($this->code_banque,$this->code_guichet,$this->number,$this->cle_rib)) { + if (! verif_rib($this->code_banque,$this->code_guichet,$this->number,$this->cle_rib,$this->iban_prefix)) { $this->error="Le contrôle de la clé indique que les informations de votre compte bancaire sont incorrectes."; return 0; } @@ -229,7 +229,7 @@ class Account // Chargement librairie pour acces fonction controle RIB require_once DOL_DOCUMENT_ROOT . '/compta/bank/bank.lib.php'; - if (! verif_rib($this->code_banque,$this->code_guichet,$this->number,$this->cle_rib)) { + if (! verif_rib($this->code_banque,$this->code_guichet,$this->number,$this->cle_rib,$this->iban_prefix)) { $this->error="Le contrôle de la clé indique que les informations de votre compte bancaire sont incorrectes."; return 0; } diff --git a/htdocs/compta/bank/bank.lib.php b/htdocs/compta/bank/bank.lib.php index a6f3400dac0..af63e08bd52 100644 --- a/htdocs/compta/bank/bank.lib.php +++ b/htdocs/compta/bank/bank.lib.php @@ -38,27 +38,33 @@ \param code_guichet \param numero_compte \param cle + \param iban Ne sert pas pour le calcul de cle mais sert pour + determiner le pays \return true si les infos sont bonnes, false si la clé ne correspond pas */ -function verif_rib($code_banque , $code_guichet , $num_compte , $cle) { - $coef = array(62, 34, 3) ; - // Concatenation des differents codes. - $rib = strtolower($code_banque.$code_guichet.$num_compte.$cle); - // On remplca les eventuelles lettres par des chiffres. - $rib = strtr($rib, "abcdefghijklmnopqrstuvwxyz","12345678912345678912345678"); - - // Separation du rib en 3 groupes de 7 + 1 groupe de 2. - // Multiplication de chaque groupe par les coef du tableau - for ($i=0, $s=0; $i<3; $i++) { - $code = substr($rib, 7 * $i, 7) ; - $s += (0 + $code) * $coef[$i] ; - } - - // Soustraction du modulo 97 de $s à 97 pour obtenir la clé RIB - $cle_rib = 97 - ($s % 97) ; - if ($cle_rib == $cle) { return true; } - return false; +function verif_rib($code_banque , $code_guichet , $num_compte , $cle, $iban) { + if (eregi("^FR",$iban)) { // Cas de la France + $coef = array(62, 34, 3) ; + // Concatenation des differents codes. + $rib = strtolower($code_banque.$code_guichet.$num_compte.$cle); + // On remplca les eventuelles lettres par des chiffres. + $rib = strtr($rib, "abcdefghijklmnopqrstuvwxyz","12345678912345678912345678"); + + // Separation du rib en 3 groupes de 7 + 1 groupe de 2. + // Multiplication de chaque groupe par les coef du tableau + for ($i=0, $s=0; $i<3; $i++) { + $code = substr($rib, 7 * $i, 7) ; + $s += (0 + $code) * $coef[$i] ; + } + + // Soustraction du modulo 97 de $s à 97 pour obtenir la clé RIB + $cle_rib = 97 - ($s % 97) ; + if ($cle_rib == $cle) { return true; } + return false; + } + + return true; }