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

en attedant de m'assurer que la rgle 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
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;
}

View File

@ -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;
}