Convertisseur somme en lettres

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 449 fois - Téléchargée 24 fois

Contenu du snippet

Ce script convertit un nombre passé en paramètre en Euros et en Cents.

Source / Exemple :


<?
function convertir($Montant)
{ 
	$grade = array(0 => "zero ",1=>" milliards ",2=>" millions ",3=>" mille "); 
    $Mon = array(0=>" Euro",1=>" Euros",2=>" Cent",3=>" Cents"); 
  
    // Mise au format pour les chéques et le SWI 
    $Montant = number_format($Montant,2,".",""); 

    if ($Montant == 0)
	{ 
        $result = $grade[0].$Mon[0]; 
    }else
	{ 
        $result = ""; 

        // Calcule des Unités 
        $montant = intval($Montant); 
  
        // Calcul des centimes 
        $centime = round(($Montant * 100) - ($montant * 100),0); 
  
        // Traitement pour les Milliards 
        $nombre = $montant / 1000000000; 
        $nombre = intval($nombre); 
        if ($nombre > 0)
		{ 
            if ($nombre > 1)
			{ 
                $result = $result.cenvtir($nombre).$grade[1]; 
            }else
			{ 
                $result = $result." Un ".$grade[1]; 
                $result = substr($result,0,13)." "; 
            } 
            $montant = $montant - ($nombre * 1000000000); 
        } 
  
        // Traitement pour les Millions 
        $nombre = $montant / 1000000; 
        $nombre = intval($nombre); 
        if ($nombre > 0)
		{ 
            if ($nombre > 1)
			{ 
                $result = $result.cenvtir($nombre).$grade[2]; 
            }else
			{ 
                $result = $result." Un ".$grade[2]; 
                $result = substr($result,0,12)." "; 
            } 
            $montant = $montant - ($nombre * 1000000); 
        } 
  
        // Traitement pour les Milliers 
        $nombre = $montant / 1000; 
        $nombre = intval($nombre); 
        if ($nombre > 0)
		{ 
            if ($nombre > 1)
			{ 
                $result = $result.cenvtir($nombre).$grade[3]; 
            }else
			{ 
                $result = $result.$grade[3]; 
            } 
            $montant = $montant - ($nombre * 1000); 
        } 
  
        // Traitement pour les Centaines & centimes 
        $nombre = $montant; 
        if ($nombre>0)
		{ 
            $result = $result.cenvtir($nombre); 
        } 
        // Traitement si le montant = 1 
        if ((substr($result,0,7) == " et un " and strlen($result) == 7))
		{ 
            $result = substr($result,3,3); 
            $result = $result.$Mon[0]; 
            if (intval($centime) != 0)
			{ 
                $differ = cenvtir(intval($centime)); 
                if (substr($differ,0,7) == " et un ")
				{ 
                    if ($result == "")
					{ 
                            $differ = substr($differ,3); 
                    } 
                    $result = $result." ".$differ.$Mon[2]; 
                }else
				{ 
                        $result = $result." et ".$differ.$Mon[3]; 
                } 
            } 
        // Traitement si le montant > 1 ou = 0 
        }else
		{ 
            if ($result != "")
			{ 
                $result = $result.$Mon[1]; 
            } 
            if (intval($centime) != 0)
			{ 
                $differ = cenvtir(intval($centime)); 
                if (substr($differ,0,7) == " et un ")
				{ 
                    if ($result == "")
					{ 
                    	$differ = substr($differ,3); 
                    } 
                    $result = $result." ".$differ.$Mon[2]; 
                }else
				{ 
                    if ($result != "")
					{ 
                    	$result = $result." et ".$differ.$Mon[3]; 
                    }else
					{ 
                        $result = $differ.$Mon[3]; 
                    } 
                } 
            } 
        } 
    } 
    return $result; 
} 
  
// fonction de convertion d'un chiffre à 3 digits en lettre 
function cenvtir($Valeur)
{ 
  
    $code = ""; 
    //texte en clair 
	$SUnit = array(1=>"et 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 "); 
	$sDiz = array(20=> "vingt ", 30=> "trente ", 40=>"quarante ", 50=>"cinquante ", 60=>"soixante ", 70=>"soixante dix ", 80=>"quatre vingt ", 90=>"quatre vingt dix ");
  
    if ($Valeur>99)
	{ 
		$N1= intval($Valeur/100); 
		if ($N1>1)
		{ 
        	$code = $code.$SUnit[$N1]; 
		} 
		$Valeur = $Valeur - ($N1*100); 
        if ($code != "")
		{ 
			if ($Valeur == 0)
			{
	    		$code = $code." cents "; 
			}else
			{
	            $code = $code." cent "; 
			}
        }else
		{ 
            $code = " cent "; 
        } 
    } 
    if ($Valeur != 0)
	{ 
        if ($Valeur > 19)
		{ 
            $N1 = intval($Valeur/10)*10; 
            $code = $code.$sDiz[$N1]; 
            if (($Valeur>=70) and($Valeur<80)or($Valeur>=90))
			{ 
                $Valeur = $Valeur + 10; 
            } 
            $Valeur = $Valeur - $N1; 
        } 
        if ($Valeur > 0)
		{ 
            $code = $code." ".$SUnit[$Valeur]; 
        } 
    } 
    return $code; 
} 
echo convertir(1000000.01);
?>

Conclusion :


Merci à gillouBx pour la structure du programme (j'ai juste corrigé quelques erreurs)
ATTENTION : On ne peut pas aller au-dessus de la valeur maximum acceptée pour les entiers par la plaetformes (2 milliards et des brouettes).

A voir également

Ajouter un commentaire

Commentaires

Messages postés
7
Date d'inscription
lundi 3 mai 2004
Statut
Membre
Dernière intervention
12 juin 2009

Bravo l'artiste !

Tu a codé ce script en 2006 avec le niveau débutant.
Je suppose que depuis tu ne l'est plus ;)

Tu devrais implémenter la solution de "dark_naruto25" elle fonctionne correctement.
Merci pour le script, l'artiste ;-)
Messages postés
127
Date d'inscription
mardi 23 août 2005
Statut
Membre
Dernière intervention
9 mai 2011

Le code est intéressant. Bien que les noms de variables de soient pas si explicite que ça.
Concernant la remarque de kiki2siron, je te présente une petite solution pour arranger le problème du 73 :
Remplace le 'if' de la ligne 162 par celui-ci :
if ($Valeur > 19) {
$N1 = intval($Valeur/10)*10;
if ( (($Valeur>70) and($Valeur<80)or($Valeur>90)) && $Valeur-$N1!=0 ) {
$code = $code.$sDiz[$N1-10];
if ( $Valeur>70 && $Valeur<80 && $Valeur-$N1==1 )
$code = $code." et ";
}else
$code = $code.$sDiz[$N1];
if (($Valeur>70) and($Valeur<80)or($Valeur>90))
$Valeur = $Valeur + 10;
$Valeur = $Valeur - $N1;
}
J'ai testé avec 70,71,72,90,91,95.
Messages postés
3
Date d'inscription
lundi 27 novembre 2000
Statut
Membre
Dernière intervention
13 mars 2007

merci pour le code mais peut tu metre oci le code de la page du formulaire, ou quelqu'un d'autre pourrer me l'envoyé sa sré simpa merci
Messages postés
153
Date d'inscription
mardi 17 août 2004
Statut
Membre
Dernière intervention
23 décembre 2010

j'ai testé vite fait rien que pour voir qu'au niveau de l'ortographe et de la sémantique, y a quelques problèmes qui persistent :
exemple => essayez 180 par exemple et vous aurez cent quatre vingt Euros, alors que ça devrait être cent quatre vingts Euros
=> essayez ....,73 et vous aurez "soixante dix treize"...

voilou
kiki
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Hello,

pas de commentaire? Tien...
Je testerai et materai le code plus en détail avant de me prononcer, mais dores et déjà, je trouve l'idée très sympa.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.