<?php // Licence Publique Générale GNU (GNU General Publique License), Copyright 2005-2008 Geffrotin Yann
/* Calcul du NSIN (National Securities Identifying Number)
http://en.wikipedia.org/wiki/NSIN */
$SansCléNSIN = rand(10000000, 99999999); // 8 char
$CléNSIN = "10";
do{
if($CléNSIN != 0){
$CléNSIN = $CléNSIN - 1;
}else{
$SansCléNSIN = rand(10000000, 99999999); // 8 char
$CléNSIN = "9";
}
$NSIN = $SansCléNSIN.$CléNSIN; //9 caractères (lettres et/ou chiffres)
$taille = strlen($NSIN); //extraction de la taille de la chaine
$Chaine = $NSIN;
//echo "NSIN ".$NSIN."</br>";
//Etape 2 : Doubler les valeurs des chiffres paires
$Tpaire = $Timpaire = "" ;
for($k=0;$k<=$taille-1;$k++){
if(bcmod($k, '2') == 0){
$Tpaire = $Tpaire.($Chaine[$k]*2);
}else{
$Timpaire = $Timpaire.$Chaine[$k];
}
}
//echo "Fin Tpaire ".$Tpaire."</br>";
//echo "Fin Timpaire ".$Timpaire."</br>";
//Etape 3 : Somme des chiffres Paires et Impaires pris séparement
$ListeChaine = $Tpaire.$Timpaire;
$TailleListeChaine = strlen($ListeChaine);
$SomChaine = 0 ;
for($l=0;$l<=$TailleListeChaine-1;$l++){
$SomChaine = $SomChaine + $ListeChaine[$l];
}
//echo "som ".$SomChaine."</br>";
// Etape 4 : Modulo 10 de la somme de l'ISIN
if(0 == substr($SomChaine, 1, 1)){
$CléChaineCalc = 0 ;
}else{
$CléChaineCalc = 10 - bcmod($SomChaine, '10');
}
//echo "clé devrait etre ".$CléChaineCalc."</br>";
}while($CléNSIN != $CléChaineCalc);
$NSIN = $SansCléNSIN.$CléNSIN; //9 caractères (lettres et/ou chiffres)
?>