<?

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