benjones | Bonjour ! Dans un projet professionnel, il me fallait une fonction me permettant de traduire un nombre entier en toute lettre. Or, malgré mes recherches, je n'ai pu trouver de fonction de ce type toute faite. Je vous transmet donc mon travail. N'ayant pas trouver de fonction, je l'ai faite moi-même. elle fonctionne bien d'après les tests que j'ai effectués et permet de transcrire n'importe quel entier >= 0 de n'importe quelle longueur. J'aimerai que vous me fassiez parvenir vos remarques, bugs trouvés, optimisations, etc... Sinon, vous pouvez utiliser cette fonction comme bon vous semble, c'est cadeau Code :
- //****************************************************************************************************
- // DESCRIPTION : Cette fonction renvoie la chaine correspondant à un nombre (ex 5 => Cinq)
- // PARAMETRES : nombre
- // RETOUR : nombre en chaine
- //****************************************************************************************************
- function php_nombre_vers_lettres($nombre)
- {
- // Ecriture du dictionnaire
- $dico = Array(0 => "zéro",
- 1 => "un",
- 2 => "deux",
- 3 => "trois",
- 4 => "quatre",
- 5 => "cinq",
- 6 => "six",
- 7 => "sept",
- 8 => "huit",
- 9 => "neuf",
- 10 => "dix",
- 20 => "vingt",
- 30 => "trente",
- 40 => "quarante",
- 50 => "cinquante",
- 60 => "soixante",
- 70 => "soixante-dix",
- 80 => "quatre-vingt",
- 90 => "quatre-vingt-dix" );
- // Ecriture des exceptions
- $exceptions = Array(11 => "onze",12 => "douze",13 => "trieze",14 => "quatorze",15 => "quinze",16 => "seize" );
-
- $chaine = "";
- if(strlen($nombre) == 1)
- {
- $chaine = $dico[$nombre];
- }
- elseif(strlen($nombre) > 1)
- {
- ///////////////////////////////
- // Gestion des deux derniers
- ///////////////////////////////
- $sous_chaine = substr($nombre,-2,2);
- // Est-ce une exception ?
- if(in_array($sous_chaine, $exceptions))
- {
- $chaine .= $exceptions[$sous_chaine];
- }
- else
- {
- // Extraction de la dizaine
- $dizaine = substr($sous_chaine,0,1);
- $unite = substr($sous_chaine,1,1);
-
- // test du "et"
- if(($unite == "1" ) && ($dizaine != "8" ))
- {
- $separateur = "-et-";
- }
- elseif($unite != "0" && $dizaine != "0" )
- {
- $separateur = "-";
- }
- else
- {
- $separateur = "";
- }
-
- // Test de l'exception de la dizaine
- if(($dizaine == "7" || $dizaine == "9" ) && ($unite != "0" ))
- {
- $unite_texte = ($unite != 0) ? (array_key_exists(($unite+10),$exceptions) ? $exceptions[($unite+10)] : ("dix-".$dico[substr($unite+10,1,1)])) : "";
- $dizaine_texte = ($dizaine != 0) ? $dico[($dizaine*10)-10] : "";
- $chaine .= $dizaine_texte.$separateur.$unite_texte;
- }
- elseif(array_key_exists($sous_chaine,$exceptions))
- {
- $chaine .= $exceptions[$sous_chaine];
- }
- else
- {
- $unite_texte = ($unite != 0) ? $dico[$unite] : "";
- $dizaine_texte = ($dizaine != 0) ? $dico[($dizaine*10)] : "";
- $chaine .= $dizaine_texte.$separateur.$unite_texte;
- }
- }
-
- ///////////////////////////////
- // Gestion des unités supérieures
- ///////////////////////////////
- // Centaines
- if(strlen($nombre) >= 3)
- {
- $sous_chaine = substr($nombre,-3,1);
- if($sous_chaine == "0" )
- {
- $chaine = " ".$chaine;
- }
- elseif($sous_chaine == "1" )
- {
- $chaine = "cent ".$chaine;
- }
- else
- {
- $debut_chaine = $dico[$sous_chaine]."-cent ";
- $chaine = $debut_chaine.$chaine;
- }
- }
- // Milliers
- if((strlen($nombre) >= 6) && (IntVal(substr($nombre,-6,3)) != 0))
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,-6,3))." mille ".$chaine;
- }
- elseif((strlen($nombre) == 5) && (IntVal(substr($nombre,-5,2)) != 0))
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,-5,2))." mille ".$chaine;
- }
- elseif((strlen($nombre) == 4) && (substr($nombre,-4,1) == "0" ))
- {
- if(substr($nombre,-4,1) == "1" )
- {
- $chaine = " mille ".$chaine;
- }
- else
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,-4,1))." mille ".$chaine;
- }
- }
- // Millions
- if((strlen($nombre) >= 9) && (IntVal(substr($nombre,-9,3)) != 0))
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,-9,3))." million ".$chaine;
- }
- elseif((strlen($nombre) == 8) && (IntVal(substr($nombre,-8,2)) != 0))
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,-8,2))." million ".$chaine;
- }
- elseif((strlen($nombre) == 7) && (IntVal(substr($nombre,-7,1)) != 0))
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,-7,1))." million ".$chaine;
- }
-
- // Milliards
- if(strlen($nombre) >= 12)
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,-12,3))." milliard ".$chaine;
- }
- elseif(strlen($nombre) == 11)
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,-11,2))." milliard ".$chaine;
- }
- elseif(strlen($nombre) == 10)
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,-10,1))." milliard ".$chaine;
- }
-
- // Vers l'infini et au delà !
- if(strlen($nombre) > 12)
- {
- $chaine = php_nombre_vers_lettres(substr($nombre,0,-13))." ".$chaine;
- }
- }
- // Retour du résultat
- return $chaine;
- }
| Merci, A+ Message édité par benjones le 30-01-2007 à 17:45:29
|