Classe de contrôle et de validation de RIB français
Ce court tutoriel vous présente une classe qui permet de créer des objets encapsulant les données d'un numéro de RIB. Elle peut s'utiliser de deux manières différentes : soit créer des objets RIB ou bien servir comme système de validation des informations bancaires grâce à ses méthodes statiques. Bien que très peu extraordinaire en soit, cette source s'avère particulièrement pratique et efficace dans lors du développement d'applications de comptabilité par exemple.
Présentation de la source
Cette courte et simple classe permet de créer des objets de type RIBValidator pour valider les informations d'un compte bancaire. Comme vous le savez sans doute, un RIB est constitué de quatre composantes : le code unique de la banque, le code unique de l'agence qui tient le compte, le numéro du compte et la clé RIB. Ce que vous ignorez peut-être en revanche, c'est que cette série de chiffres et de lettres n'est pas construite au hasard. En effet, le grand secret d'un RIB réside dans la clé qui est calculée à partir d'un algorithme utilisant les trois autres parties du RIB.
Cette classe s'appuie sur cet algorithme de calcul de clé RIB que vous pouvez découvrir sur Wikipédia à l'adresse suivante : http://fr.wikipedia.org/wiki/Cl%C3%A9_RIB. Entrons dans le vif du sujet et présentons le code de la classe RIB_FR. Nous verrons ensuite quelques exemples d'utilisation.
Code source de la classe RIBValidator
<?phpclass RIBValidator{private $bankCode;private $agencyCode;private $accountNumber;private $ribKey;public function __construct($bankCode, $agencyCode, $accountNumber, $ribKey){$this->bankCode = (int) $bankCode;$this->agencyCode = (int) $agencyCode;$this->accountNumber = (string) $accountNumber;$this->ribKey = (int) $ribKey;}public function isValid(){$account = (int) strtr(strtoupper($this->accountNumber), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '12345678912345678923456789');$key = 97 - ((89 * $this->bankCode + 15 * $this->agencyCode + 3 * $account) % 97);return $key === $this->ribKey;}}
Utilisation de la classe
<?php$validator = new RIBValidator('00123', '00123', '000012536ML', '64');if ($validator->isValid()) {echo 'Account number is valid.';} else {echo 'Account number is not valid.';}
Tests unitaires avec PHPUnit
<?phprequire __DIR__.'/../RIBValidator.php';class RIBValidatorTest extends PHPUnit_Framework_TestCase{/** @dataProvider provideAccountNumbers */public function testValidAccountNumbers($bank, $agency, $account, $key){$validator = new RIBValidator($bank, $agency, $account, $key);$this->assertTrue($validator->isValid());}public function testInvalidAccountNumber(){$validator = new RIBValidator('00123', '00123', '000012536ML', '65');$this->assertFalse($validator->isValid());}public function provideAccountNumbers(){// add a list of valid account numbers here...);}}
- « Réalisation d'un livre d'or avec PDO et MVC
- Rotation de bannières publicitaires à affichage aléatoire »
Les commentaires
2. Par RobertVonTagada le 04/03/2009 10:53
Bonjour !
Merci pour cette class bien utils !
Même problème que Julien, les RIB avec une clef commençant par 0 sont "invalide".
En faite, c'est la comparaison $sCleRib === self::calculerCleRib($sCodeBanque, $sCodeGuichet, $sNumeroCompte) qui n'est pas "bonne".
En gros, les deux valeurs testé n'ont pas le même type, donc soit on cast soit on se contente de tester les valeurs et pas le type par un simple ==
--------------
if($sCleRib == self::calculerCleRib($sCodeBanque, $sCodeGuichet, $sNumeroCompte))
{
$bCorrect = true;
}
1. Par Julien le 26/09/2008 12:08