47 lines
1.2 KiB
PHP
47 lines
1.2 KiB
PHP
<?
|
|
|
|
function isinPoidsLettre($lettre) {
|
|
$ascii=ord($lettre);
|
|
if ($ascii>64 && $ascii<91 )
|
|
/* En ASCII : A=65 et Z=90
|
|
En ISIN... A=10 et Z=35 */
|
|
return ($ascii-55);
|
|
return false;
|
|
}
|
|
|
|
/** Test si un code ISIN donné est valable à partir de son algo de contrôle.
|
|
** @param string $isin Code ISIN à vérifier
|
|
** @return bool
|
|
**/
|
|
function isValidIsin($isin) {
|
|
|
|
$pays=substr($isin, 0,2);
|
|
$nsin=''.substr($isin, 2,9);
|
|
$clef=substr($isin,11,1)*1;
|
|
|
|
$calcul=''.isinPoidsLettre($pays[0]).isinPoidsLettre($pays[1]).$nsin;
|
|
//echo "Etape 1 = $calcul".EOL;
|
|
|
|
$sommeImpair=$sommePair=0;
|
|
for ($impair=0; $impair<12; $impair=$impair+2) {
|
|
$strImpair=''.$calcul[$impair]*2;
|
|
if (isset($strImpair[1])) $reste=$strImpair[1]*1;
|
|
else $reste=0;
|
|
$sommeImpair+=$strImpair[0]*1+$reste;
|
|
}
|
|
|
|
for ($pair=1; $pair<12; $pair=$pair+2)
|
|
$sommePair+=$calcul[$pair]*1;
|
|
|
|
$totalcalcul=$sommeImpair+$sommePair;
|
|
//echo "Etape 3 = $sommeImpair + $sommePair = $totalcalcul".EOL;
|
|
|
|
$dizSuperieur=ceil($totalcalcul/10)*10;
|
|
$delta=$dizSuperieur-$totalcalcul;
|
|
//echo "Etape 4 = $dizSuperieur - $totalcalcul = $delta".EOL;
|
|
|
|
if ($delta==$clef) return true;
|
|
|
|
return false;
|
|
}
|
|
?>
|