<?php
class ChiffreEnLettre
{

	#Variables 
	private $leChiffreSaisi;
	private $enLettre='';
	private $chiffre=array(1=>"un",2=>"deux",3=>"trois",4=>"quatre",5=>"cinq",6=>"six",7=>"sept",8=>"huit",9=>"neuf",10=>"dix",11=>"onze",12=>"douze",13=>"treize",14=>"quatorze",15=>"quinze",16=>"seize",17=>"dix-sept",18=>"dix-huit",19=>"dix-neuf",20=>"vingt",30=>"trente",40=>"quarante",50=>"cinquante",60=>"soixante",70=>"soixante-dix",80=>"quatre-vingt",90=>"quatre-vingt-dix");
	
	#Fonction initialisation
	function init()
	{
		$this->enLettre = '';
	}

	#Fonction de conversion appelée dans la feuille principale
	function Conversion($sasie)
	{
		$sasie=trim($sasie);
		
		#suppression des espaces qui pourraient exister dans la saisie
		$nombre='';
		$laSsasie=explode(' ',$sasie);
		foreach ($laSsasie as $partie)
		$nombre.=$partie;
		
		#suppression des zéros qui précéderaient la saisie
		$nb=strlen($nombre);
		for ($i=0;$i<=$nb;)
		{
			if(substr($nombre,$i,1)==0)
			{
			$nombre=substr($nombre,$i+1);
			$nb=$nb-1;
			}
			elseif(substr($nombre,$i,1)<>0)
			{
			$nombre=substr($nombre,$i);
			break;
			}
		}	
	#echo $nombre;
		#$this->SupZero($nombre);
		#le nombre de caract que comporte le nombre saisi de sa forme sans espace et sans 0 au début
		$nb=strlen($nombre);
		#echo $nb.'<br/ >';
		#$this->leChiffreSaisi=$nombre;
		#conversion du chiffre saisi en lettre selon les cas
		switch ($nb) 
		{
		case 0:
			$this->enLettre='zéro';
		case 1:
			if ($nombre==0)
			{
			 $this->enLettre='zéro';
			break;
			}
			elseif($nombre<>0)
			{
			$this->Unite($nombre);
			break;
			}
			
		case 2:
			$unite=substr($nombre,1);
			$dizaine=substr($nombre,0,1);
			$this->Dizaine($nombre,$unite,$dizaine);
			break;
			
		case 3:
			$unite=substr($nombre,2);
			$dizaine=substr($nombre,1,1);
			$centaine=substr($nombre,0,1);
			$this->Centaine($nombre,$unite,$dizaine,$centaine);
			break;
			
			#cas des milles
		case ($nb>3 and $nb<=6):
			$unite=substr($nombre,$nb-1);
			$dizaine=substr($nombre,($nb-2),1);
			$centaine=substr($nombre,($nb-3),1);
			$mille=substr($nombre,0,($nb-3));
			$this->Mille($nombre,$unite,$dizaine,$centaine,$mille);
			break;
			
			#cas des millions
		case ($nb>6 and $nb<=9):
			$unite=substr($nombre,$nb-1);
			$dizaine=substr($nombre,($nb-2),1);
			$centaine=substr($nombre,($nb-3),1);
			$mille=substr($nombre,-6);
			$million=substr($nombre,0,$nb-6);
			$this->Million($nombre,$unite,$dizaine,$centaine,$mille,$million);
			break;
			
			#cas des milliards
		/*case ($nb>9 and $nb<=12):
			$unite=substr($nombre,$nb-1);
			$dizaine=substr($nombre,($nb-2),1);
			$centaine=substr($nombre,($nb-3),1);
			$mille=substr($nombre,-6);
			$million=substr($nombre,-9);
			$milliard=substr($nombre,0,$nb-9);
			Milliard($nombre,$unite,$dizaine,$centaine,$mille,$million,$milliard);
			break;*/
		
		}
	if (!empty($this->enLettre))
	return strtoupper($this->enLettre);
	}		
	
	#Gestion des miiliards
	/*
	function Milliard($nombre,$unite,$dizaine,$centaine,$mille,$million,$milliard)
	{
	
	}
	*/	
		
	#Gestion des millions		
	
	function Million($nombre,$unite,$dizaine,$centaine,$mille,$million)
	{
		#si les mille comportent un seul chiffre
		#$cent represente les 3 premiers chiffres du chiffre ex: 321 dans 12502321
		#$mille represente les 3 chiffres qui suivent les cents ex: 502 dans 12502321
		#reste represente les 6 premiers chiffres du chiffre ex: 502321 dans 12502321
		
		$cent=substr($nombre,-3);
		$reste=substr($nombre,-6);
		
		if (strlen($million)==1)
		{
		$mille=substr($nombre,1,3);
		$this->enLettre.=$this->chiffre[$million];
		}
		elseif (strlen($million)==2)
		{
		$mille=substr($nombre,2,3);
		$nombre=substr($nombre,0,2);
		//echo $nombre;
		$this->Dizaine($nombre,$unite,$dizaine);
		}
		elseif (strlen($million)==3)
		{
		$mille=substr($nombre,3,3);
		$nombre=substr($nombre,0,3);
		$this->Centaine($nombre,$unite,$dizaine,$centaine);
		}
			
			$this->enLettre.='million ';
			#recuperation des cens dans nombre
			
			#suppression des zéros qui précéderaient le $reste
			$nb=strlen($reste);
			for ($i=0;$i<=$nb;)
			{
				if(substr($reste,$i,1)==0)
				{
				$reste=substr($reste,$i+1);
				$nb=$nb-1;
				}
				elseif(substr($reste,$i,1)<>0)
				{
				$reste=substr($reste,$i);
				break;
				}
			}	
			$nb=strlen($reste);
			#si tous les chiffres apres les milions =000000 on affiche x million
			if ($nb==0)
			;
			else
			{
			#Gestion des milles
			#suppression des zéros qui précéderaient les milles dans $mille
			$nb=strlen($mille);
			for ($i=0;$i<=$nb;)
			{
				if(substr($mille,$i,1)==0)
				{
				$mille=substr($mille,$i+1);
				$nb=$nb-1;
				}
				elseif(substr($mille,$i,1)<>0)
				{
				$mille=substr($mille,$i);
				break;
				}
			}	
		#le nombre de caract que comporte le nombre saisi de sa forme sans espace et sans 0 au début
			$nb=strlen($mille);
			#echo '<br />nb='.$nb.'<br />';
			if ($nb==0)
			;
			#AffichageResultat($enLettre);
			elseif ($nb==1)
			{
			if ($mille==1)
				$this->enLettre.='mille ';
				else
				{
				$this->Unite($mille);
				$this->enLettre.='mille ';
				}
			}
			elseif ($nb==2)
			{
			$this->Dizaine($mille,$unite,$dizaine);
			$this->enLettre.='mille ';
			}
			elseif ($nb==3)
			{
			$this->Centaine($mille,$unite,$dizaine,$centaine);	
			$this->enLettre.='mille ';
			}
			#Gestion des cents 
			#suppression des zéros qui précéderaient les cents dans $cent
			$nb=strlen($cent);
			for ($i=0;$i<=$nb;)
			{
				if(substr($cent,$i,1)==0)
				{
				$cent=substr($cent,$i+1);
				$nb=$nb-1;
				}
				elseif(substr($cent,$i,1)<>0)
				{
				$cent=substr($cent,$i);
				break;
				}
			}	
		#le nombre de caract que comporte le nombre saisi de sa forme sans espace et sans 0 au début
			$nb=strlen($cent);
			#echo '<br />nb='.$nb.'<br />';
			if ($nb==0)
			;
			#AffichageResultat($enLettre);
			elseif ($nb==1)
			$this->Unite($cent);
			elseif ($nb==2)
			$this->Dizaine($cent,$unite,$dizaine);
			elseif ($nb==3)
			$this->Centaine($cent,$unite,$dizaine,$centaine);
			}
	}
	
	#Gestion des milles		
	
	function Mille($nombre,$unite,$dizaine,$centaine,$mille)
	{
		#si les mille comportent un seul chiffre
		#$cent represente les 3 premiers chiffres du chiffre ex: 321 dans 12321
		if (strlen($mille)==1)
		{
			$cent=substr($nombre,1);
			#si ce chiffre=1
			if ($mille==1)
			$this->enLettre.='';
			#si ce chiffre<>1
			elseif($mille<>1)
			$this->enLettre.=$this->chiffre[$mille];
		}
		elseif (strlen($mille)>1)
		{
			if (strlen($mille)==2)
			{
			$cent=substr($nombre,2);
			$nombre=substr($nombre,0,2);
			#echo $nombre;
			$this->Dizaine($nombre,$unite,$dizaine);
			}
			if (strlen($mille)==3)
			{
			$cent=substr($nombre,3);
			$nombre=substr($nombre,0,3);
			#echo $nombre;
			$this->Centaine($nombre,$unite,$dizaine,$centaine);
			}
		}		
			
				$this->enLettre.='mille ';
				#recuperation des cens dans nombre
				#suppression des zéros qui précéderaient la saisie
				$nb=strlen($cent);
				for ($i=0;$i<=$nb;)
				{
					if(substr($cent,$i,1)==0)
					{
					$cent=substr($cent,$i+1);
					$nb=$nb-1;
					}
					elseif(substr($cent,$i,1)<>0)
					{
					$cent=substr($cent,$i);
					break;
					}
				}	
				#le nombre de caract que comporte le nombre saisi de sa forme sans espace et sans 0 au début
				$nb=strlen($cent);
				#echo '<br />nb='.$nb.'<br />';
				if ($nb==0)
				;//AffichageResultat($enLettre);
				elseif ($nb==1)
				$this->Unite($cent);
				elseif ($nb==2)
				$this->Dizaine($cent,$unite,$dizaine);
				elseif ($nb==3)
				$this->Centaine($cent,$unite,$dizaine,$centaine);
					
	}
	
	#Gestion des centaines
		
	function Centaine($nombre,$unite,$dizaine,$centaine)
	{
		
		$unite=substr($nombre,2);
		$dizaine=substr($nombre,1,1);
		$centaine=substr($nombre,0,1);
		#comme 700
		if ($unite==0 and $dizaine==0)
		{
			if ($centaine==1)
			$this->enLettre.='cent';
			elseif ($centaine<>1)
			$this->enLettre.=($this->chiffre[$centaine].' cent').' ';
		}
		#comme 705
		elseif ($unite<>0 and $dizaine==0)
		{
			if ($centaine==1)
			$this->enLettre.=('cent '.$this->chiffre[$unite]).' ';
			elseif ($centaine<>1)
			$this->enLettre.=($this->chiffre[$centaine].' cent '.$this->chiffre[$unite]).' ';
		}
		//comme 750
		elseif ($unite==0 and $dizaine<>0)
		{
			#recupération des dizaines
			$nombre=substr($nombre,1);
			//echo '<br />nombre='.$nombre.'<br />';
			if ($centaine==1)
			{
			$this->enLettre.='cent ';
			$this->Dizaine($nombre,$unite,$dizaine).' ';
			}
			elseif ($centaine<>1)
			{
			$this->enLettre.=$this->chiffre[$centaine].' cent ';
			$this->Dizaine($nombre,$unite,$dizaine).' ';
		
			}
		
		}	
		#comme 695
		elseif ($unite<>0 and $dizaine<>0)
		{
			$nombre=substr($nombre,1);
		
			if ($centaine==1)
			{
			$this->enLettre.='cent ';
			$this->Dizaine($nombre,$unite,$dizaine).' ';
			}
			
			elseif ($centaine<>1)
			{
			$this->enLettre.=($this->chiffre[$centaine].' cent ');
			$this->Dizaine($nombre,$unite,$dizaine).' ';
			}			 	
		}				 
		  
	}
	
	
	#Gestion des dizaines	
		
	function Dizaine($nombre,$unite,$dizaine)
	{
		$unite=substr($nombre,1);
		$dizaine=substr($nombre,0,1);
	
		#comme 70
		if ($unite==0)
		{
		 $val=$dizaine.'0';
		 $this->enLettre.=$this->chiffre[$val].' ';
		}
		#comme 71
		elseif ($unite<>0)
		#dizaine different de 9
		if ($dizaine<>9 and $dizaine<>7)
		{
			if ($dizaine==1)
			{
			$val=$dizaine.$unite;
			$this->enLettre.=$this->chiffre[$val].' ';
			}
			else
			{
			$val=$dizaine.'0';
			$this->enLettre.=($this->chiffre[$val].' '.$this->chiffre[$unite]).' ';
			}
		}
		#dizaine =9
		elseif ($dizaine==9)
			$this->enLettre.=($this->chiffre[80].' '.$this->chiffre['1'.$unite]).' ';
		elseif ($dizaine==7)
			$this->enLettre.=($this->chiffre[60].' '.$this->chiffre['1'.$unite]).' ';
			 
	}
	
	#Gestion des unités	
		
	function Unite($unite)
	{
		if ($unite!="") {
			$this->enLettre.=($this->chiffre[$unite]).' ';
		}
	}

}
