diff --git a/lang/verifier_ca.php b/lang/verifier_ca.php
index 2502fe8c704be4e542ce595a6d360c5eb38d6dbe..6969ee2a9a808094b7f38e4201a3f5cfdd2a16ca 100644
--- a/lang/verifier_ca.php
+++ b/lang/verifier_ca.php
@@ -8,7 +8,8 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 $GLOBALS[$GLOBALS['idx_lang']] = array(
 
 	// E
-	'erreur_date' => 'El format de la data no és correcte.',
+	'erreur_date' => 'La data no és correcte.',
+	'erreur_date_format' => 'El format de la data no és correcte.',
 	'erreur_email' => 'L\'adre&ccedil;a de correu electr&ograve;nic <em>@email@</em> no t&eacute; un format v&agrave;lid.',
 	'erreur_email_nondispo' => 'L\'adre&ccedil;a de correu electr&ograve;nic <em>@email@</em> ja s\'utilitza.',
 	'erreur_entier' => 'El valor ha de ser un nombre enter.',
diff --git a/lang/verifier_de.php b/lang/verifier_de.php
index 0493b2a29bc57b0ac6a1128e96da20e2dfd4e7e8..7e6b0b0a8c5af61e453e3900767d10448642663c 100644
--- a/lang/verifier_de.php
+++ b/lang/verifier_de.php
@@ -8,7 +8,8 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 $GLOBALS[$GLOBALS['idx_lang']] = array(
 
 	// E
-	'erreur_date' => 'Fromat des Datums ung&uuml;ltig',
+	'erreur_date' => 'Das Datum ist nicht g&uuml;ltig',
+	'erreur_date_format' => 'Format des Datums ung&uuml;ltig',
 	'erreur_email' => 'Die Mailadresse  <em>@email@</em> hat einen Syntaxfehler.',
 	'erreur_email_nondispo' => 'Die Mailadresse <em>@email@</em>  wird bereits verwendet.',
 	'erreur_entier' => 'Der Wert mu&szlig; eine ganze Zahl sein.',
diff --git a/lang/verifier_en.php b/lang/verifier_en.php
index c307ce5cdf4d4be4e92f0149e1194869e3ebbf2c..8f10f0ecca5cb2df99d6b05f366fc5ba818efb40 100644
--- a/lang/verifier_en.php
+++ b/lang/verifier_en.php
@@ -8,7 +8,8 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 $GLOBALS[$GLOBALS['idx_lang']] = array(
 
 	// E
-	'erreur_date' => 'The date format is invalid.',
+	'erreur_date' => 'The date is invalid.',
+	'erreur_date_format' => 'The date format is invalid.',
 	'erreur_email' => 'The email address <em>@email@</em> is not correctly formatted.',
 	'erreur_email_nondispo' => 'The email address <em>@email@</em> has already been used.',
 	'erreur_entier' => 'The value must be an integer.',
diff --git a/lang/verifier_fr.php b/lang/verifier_fr.php
index 165ed9385e70d3c97a90c783ae7f9927a5fb1c85..3652e55cdef42b7b2a98ae8c392e229368a4322c 100644
--- a/lang/verifier_fr.php
+++ b/lang/verifier_fr.php
@@ -6,7 +6,8 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 $GLOBALS[$GLOBALS['idx_lang']] = array(
 
 	// E
-	'erreur_date' => 'Le format de la date n\'est pas accept&eacute;.',
+	'erreur_date' => 'La date n\'est pas valide.',
+	'erreur_date_format' => 'Le format de la date n\'est pas accept&eacute;.',
 	'erreur_email' => 'L\'adresse de courriel <em>@email@</em> n\'a pas un format valide.',
 	'erreur_email_nondispo' => 'L\'adresse de courriel <em>@email@</em> est d&eacute;j&agrave; utilis&eacute;e.',
 	'erreur_entier' => 'La valeur doit &ecirc;tre un entier.',
diff --git a/test/verifier.html b/test/verifier.html
index e1d39e507f314d1367c50ca0492ad90cfbe9e776..60dd033b7526a458e004993e1f5d33733775280c 100644
--- a/test/verifier.html
+++ b/test/verifier.html
@@ -140,11 +140,17 @@ var_dump($verifier($siret_non_valide, 'siren_siret',array('mode'=>'siret')));
 <?php
 $date_valide = "30-01-2009";
 $date_non_valide = "321227822";
+$date_non_valide2 = "29-02-2011";
+$date_valide2 = "29-02-2012";
 
 echo "Date JJ/MM/AAAA (avec séparateur /.-) : $date_valide ?";
 var_dump($verifier($date_valide, 'date'));
 echo "Date JJ/MM/AAAA : $date_non_valide ?";
 var_dump($verifier($date_non_valide, 'date'));
+echo "Date JJ/MM/AAAA : $date_non_valide2 ?";
+var_dump($verifier($date_non_valide2, 'date'));
+echo "Date JJ/MM/AAAA : $date_valide2 ?";
+var_dump($verifier($date_valide2, 'date'));
 ?>
 </pre>
 
diff --git a/verifier/date.php b/verifier/date.php
index 65f5942181532a9e74821fb625c47feebfc771e5..0957b90c649e6ecc9b5e227ef1e22ba7dc36a966 100644
--- a/verifier/date.php
+++ b/verifier/date.php
@@ -15,7 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
  */
 
 function verifier_date_dist($valeur, $options=array()){
-	$erreur = _T('verifier:erreur_date');
+	$erreur = _T('verifier:erreur_date_format');
 	$ok = '';
 	// On tolère différents séparateurs
 	$valeur = preg_replace("#\.|/| #i",'-',$valeur);
@@ -24,7 +24,9 @@ function verifier_date_dist($valeur, $options=array()){
 	if(!preg_match('#^[0-9]{2}-[0-9]{2}-[0-9]{4}$#',$valeur)) return $erreur;
 	// On vérifie vite fait que les dates existent, genre le 32 pour un jour NON, (mais on pourrait aller plus loin et vérifier en fonction du mois)
 	list($jour,$mois,$annee) = explode('-',$valeur);
-	if(($jour > 31)|| ($jour < 1) || ($mois > 12) || ($mois < 1) || ($annee < 1800)) return $erreur; // 1800, je crois qu'avant les gens ne sont plus vivants °_°
+	// validité de la date
+	$erreur = _T('verifier:erreur_date');
+	if (!checkdate($mois, $jour, $annee)) return $erreur;
 	
 	return $ok;
 }