Le controle de la clé n'est fait que si le pays du compte bancaire (détecté sur l'iban) est la France,

en attedant de m'assurer que la règle fonctionne aussi pour d'autres pays.
This commit is contained in:
Laurent Destailleur 2004-08-04 07:10:40 +00:00
parent af955527dd
commit 791ea970b7
2 changed files with 26 additions and 20 deletions

View File

@ -186,7 +186,7 @@ class Account
// Chargement librairie pour acces fonction controle RIB // Chargement librairie pour acces fonction controle RIB
require_once DOL_DOCUMENT_ROOT . '/compta/bank/bank.lib.php'; 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."; $this->error="Le contrôle de la clé indique que les informations de votre compte bancaire sont incorrectes.";
return 0; return 0;
} }
@ -229,7 +229,7 @@ class Account
// Chargement librairie pour acces fonction controle RIB // Chargement librairie pour acces fonction controle RIB
require_once DOL_DOCUMENT_ROOT . '/compta/bank/bank.lib.php'; 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."; $this->error="Le contrôle de la clé indique que les informations de votre compte bancaire sont incorrectes.";
return 0; return 0;
} }

View File

@ -38,27 +38,33 @@
\param code_guichet \param code_guichet
\param numero_compte \param numero_compte
\param cle \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 \return true si les infos sont bonnes, false si la clé ne correspond pas
*/ */
function verif_rib($code_banque , $code_guichet , $num_compte , $cle) { function verif_rib($code_banque , $code_guichet , $num_compte , $cle, $iban) {
$coef = array(62, 34, 3) ; if (eregi("^FR",$iban)) { // Cas de la France
// Concatenation des differents codes. $coef = array(62, 34, 3) ;
$rib = strtolower($code_banque.$code_guichet.$num_compte.$cle); // Concatenation des differents codes.
// On remplca les eventuelles lettres par des chiffres. $rib = strtolower($code_banque.$code_guichet.$num_compte.$cle);
$rib = strtr($rib, "abcdefghijklmnopqrstuvwxyz","12345678912345678912345678"); // 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 // Separation du rib en 3 groupes de 7 + 1 groupe de 2.
for ($i=0, $s=0; $i<3; $i++) { // Multiplication de chaque groupe par les coef du tableau
$code = substr($rib, 7 * $i, 7) ; for ($i=0, $s=0; $i<3; $i++) {
$s += (0 + $code) * $coef[$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) ; // Soustraction du modulo 97 de $s à 97 pour obtenir la clé RIB
if ($cle_rib == $cle) { return true; } $cle_rib = 97 - ($s % 97) ;
return false; if ($cle_rib == $cle) { return true; }
return false;
}
return true;
} }