diff --git a/.gitattributes b/.gitattributes
index eec04f5afa23beed0bf57e9986772330c2e13de6..f07c666024a755797e9bcfa4653e4f9af85ad334 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3,6 +3,15 @@ inc/verifier.php -text
 lang/verifier_fr.php -text
 /plugin.xml -text
 test/verifier.html -text
+verifier/date.php -text
 verifier/email.php -text
+verifier/email_disponible.php -text
+verifier/email_strict.php -text
 verifier/entier.php -text
+verifier/numerique.php -text
 verifier/regex.php -text
+verifier/siren.php -text
+verifier/siret.php -text
+verifier/taille.php -text
+verifier/telephone_fr.php -text
+verifier/url.php -text
diff --git a/lang/verifier_fr.php b/lang/verifier_fr.php
index 7f695996cae179695fb6954f1997a19fb1c84188..23add653389caa43cbfc72814e5ce3cca4bed41e 100644
--- a/lang/verifier_fr.php
+++ b/lang/verifier_fr.php
@@ -4,12 +4,22 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 $GLOBALS[$GLOBALS['idx_lang']] = array(
+'erreur_date' => "Le format de la date n'est pas accepté.",
 'erreur_email' => 'L\'adresse de courriel n\'a pas un format valide.',
+'erreur_email_nondispo'=>"L'adresse de courriel est déjà enregistré.",
 'erreur_entier' => 'La valeur doit être un entier.',
 'erreur_entier_entre' => 'La valeur doit être comprise entre @min@ et @max@.',
 'erreur_entier_max' => 'La valeur doit être inférieure à @max@.',
 'erreur_entier_min' => 'La valeur doit être suppérieure à @min@.',
-'erreur_regex' => 'Le format de la chaîne n\'est pas valide.'
+'erreur_numerique' => 'Le format du nombre n\'est pas valide.',
+'erreur_regex' => 'Le format de la chaîne n\'est pas valide.',
+'erreur_siren' => 'Le numéro de SIREN n\'est pas valide.',
+'erreur_siret' => 'Le numéro de SIRET n\'est pas valide.',
+'erreur_taille_entre' => 'La valeur doit comprendre entre @min@ et @max@ caractères.',
+'erreur_taille_max' => 'La valeur doit comprendre au maximum @max@ caractères.',
+'erreur_taille_min' => 'La valeur doit comprendre au minimum @min@ caractères.',
+'erreur_telephone' => "Le numéro n'est pas valide.",
+'erreur_url' => "L'adresse n\'est pas valide."
 );
 
 ?>
diff --git a/test/verifier.html b/test/verifier.html
index 3edeab4506bb87b649fd4f473a9d0f1205de4f10..5d185a92929eaa774e64fd55baeb0ddc1c69d2fc 100644
--- a/test/verifier.html
+++ b/test/verifier.html
@@ -22,7 +22,7 @@ var_dump(verifier($un_autre_mot, 'regex', array('modele'=>$modele)));
 </pre>
 
 <h2>Vérifions des entiers :</h2>
-</pre>
+<pre>
 <?php
 
 $un_entier = 568;
@@ -40,19 +40,110 @@ var_dump(verifier($un_autre_entier, 'entier', array('min'=>-100, 'max'=>-50)));
 ?>
 </pre>
 
-<h2>Vérifions des emails :</h2>
+<h2>V&eacute;rifions une taille d'une cha&icirc;ne :</h2>
+<pre>
+<?php
+
+$une_chaine = "123456";
+$un_autre_chaine = "abc";
+
+echo "$une_chaine de 1 à 3 caractères ?";
+var_dump(verifier($une_chaine, 'taille', array('min'=>1, 'max'=>3)));
+echo "$une_chaine 5 caractères max ?";
+var_dump(verifier($une_chaine, 'taille', array('max'=>5)));
+echo "$une_chaine 4 caractères mini ?";
+var_dump(verifier($une_chaine, 'taille', array('min'=>4)));
+echo "$un_autre_chaine de 1 à 3 caractères ?";
+var_dump(verifier($un_autre_chaine, 'taille', array('min'=>1, 'max'=>3)));
+echo "$un_autre_chaine 5 caractères max ?";
+var_dump(verifier($un_autre_chaine, 'taille', array('max'=>5)));
+echo "$un_autre_chaine 4 caractères mini ?";
+var_dump(verifier($un_autre_chaine, 'taille', array('min'=>4)));
+
+?>
 </pre>
+
+
+<h2>Vérifions des emails :</h2>
+<pre>
 <?php
 
 $email = "test@test.fr";
-$email2 = "test";
+$email2 = "test@b";
+$email3 = "test";
 
-echo "$email ?";
+echo "Valide SPIP : $email ?";
 var_dump(verifier($email, 'email'));
-echo "$email2 ?";
+echo "Valide SPIP : $email2 ?";
 var_dump(verifier($email2, 'email'));
+echo "Valide SPIP : $email3 ?";
+var_dump(verifier($email3, 'email'));
+
+echo "Valide Strict : $email ?";
+var_dump(verifier($email, 'email_strict'));
+echo "Valide Strict : $email2 ?";
+var_dump(verifier($email2, 'email_strict'));
+echo "Valide Strict : $email3 ?";
+var_dump(verifier($email3, 'email_strict'));
+
 
 ?>
 </pre>
+
+<h2>Vérifions des téléphones :</h2>
+<pre>
+<?php
+
+$telephone = "01.01/01-02 03";
+$telephone2 = "090909";
+$telephone3 = "10 01 01 01 01";
+
+echo "Téléphone : $telephone ?";
+var_dump(verifier($telephone, 'telephone_fr'));
+echo "Téléphone : $telephone2 ?";
+var_dump(verifier($telephone2, 'telephone_fr'));
+echo "Téléphone : $telephone3 ?";
+var_dump(verifier($telephone3, 'telephone_fr'));
+
+
+?>
+</pre>
+
+
+<h2>Vérifions des SIREN/SIRET :</h2>
+<pre>
+<?php
+
+$siren_valide = "321227852";
+$siren_non_valide = "321227822";
+$siret_valide = "32122785200019";
+$siret_non_valide = "32122785200033";
+
+echo "SIREN : $siren_valide ?";
+var_dump(verifier($siren_valide, 'siren'));
+echo "SIREN : $siren_non_valide ?";
+var_dump(verifier($siren_non_valide, 'siren'));
+
+echo "SIRET : $siret_valide ?";
+var_dump(verifier($siret_valide, 'siret'));
+echo "SIRET : $siret_non_valide ?";
+var_dump(verifier($siret_non_valide, 'siret'));
+?>
+</pre>
+
+<h2>Vérifions des DATES :</h2>
+<pre>
+<?php
+$date_valide = "30/01/2009";
+$date_non_valide = "321227822";
+
+echo "Date JJ/MM/AAAA : $date_valide ?";
+var_dump(verifier($date_valide, 'date'));
+echo "Date JJ/MM/AAAA : $date_non_valide ?";
+var_dump(verifier($date_non_valide, 'date'));
+?>
+</pre>
+
+
 </body>
 </html>
diff --git a/verifier/date.php b/verifier/date.php
new file mode 100644
index 0000000000000000000000000000000000000000..ae9901fc70fea3b61d34f198080265085f24d650
--- /dev/null
+++ b/verifier/date.php
@@ -0,0 +1,24 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Une date au format JJ/MM/AAAA
+ * TODO : introduire via les options le FORMAT de la date, pour accepter différentes écritures
+ * On pourrait faire mieux, genre vérifier les jours en fonction du mois
+ * Mais c'est pas très important, on reste simple
+ */
+
+function verifier_date_dist($valeur, $options=array()){
+	$erreur = _T('verifier:erreur_date');
+	$ok = '';
+	
+	// On vérifie la validité du format
+	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 °_°
+	
+	return $ok;
+}
diff --git a/verifier/email_disponible.php b/verifier/email_disponible.php
new file mode 100644
index 0000000000000000000000000000000000000000..ec61a4b153e38ac918d8ac911232f8833c7676e7
--- /dev/null
+++ b/verifier/email_disponible.php
@@ -0,0 +1,19 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Vérifier que le courriel utilisé n'est pas
+ * déjà présent en base SPIP_AUTEURS
+ */
+function verifier_email_disponible_dist($valeur, $options=array()){
+	include_spip('base/abstract_sql');
+	$erreur = _T('verifier:erreur_email_nondispo');
+	$ok = '';
+
+	$emailDejaUtilise = sql_getfetsel("id_auteur", "spip_auteurs", "email='".$valeur."'");
+	if($emailDejaUtilise) return $erreur;
+	
+	return $ok;
+}
diff --git a/verifier/email_strict.php b/verifier/email_strict.php
new file mode 100644
index 0000000000000000000000000000000000000000..bb7c847a752c2bfb98cd836df4a687ecea86a00e
--- /dev/null
+++ b/verifier/email_strict.php
@@ -0,0 +1,31 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Changement de la RegExp d'origine
+ * Non respect des RFC beaucoup trop souples à mon sens
+ * On INTERDIT les mails dont les domaines ne sont pas "valides"
+ * On INTERDIT les adresses qui comportent autre chose que des tirets / tirets bas / point
+ * (même si les autres caractères sont autorisés, tant pis, ils sont trop rares)
+ */
+function verifier_email_strict_dist($valeur, $options=array()){
+	$erreur = _T('verifier:erreur_email');
+	$ok = '';
+
+	// Si c'est un spammeur autant arreter tout de suite
+	if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $valeur)) {
+		spip_log("Tentative d'injection de mail : $valeur");
+		return $erreur;
+	}
+	foreach (explode(',', $valeur) as $v) {
+		// nettoyer certains formats
+		// "Marie Toto <Marie@toto.com>"
+		$adresse = trim(preg_replace(",^[^<>\"]*<([^<>\"]+)>$,i", "\\1", $v));
+		// NOUVELLE REGEXP NE RESPECTANT PLUS RFC 822 MAIS MOINS TOLERANTE
+		if (!preg_match('/^([A-Za-z0-9]){1}([A-Za-z0-9]|-|_|\.)*@[A-Za-z0-9]([A-Za-z0-9]|-|\.){1,}\.[A-Za-z]{2,4}$/', $adresse))
+			return $erreur;
+	}
+	return $ok;
+}
diff --git a/verifier/numerique.php b/verifier/numerique.php
new file mode 100644
index 0000000000000000000000000000000000000000..510eb513e047fd94d6e46ae1f6760c4713547f82
--- /dev/null
+++ b/verifier/numerique.php
@@ -0,0 +1,15 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Un nombre est composé de chiffres
+ */
+
+function verifier_numerique_dist($valeur, $options=array()){
+	$erreur = _T('verifier:erreur_numerique');
+	$ok = '';
+	if(!preg_match('/^[0-9]*$/',$valeur)) return $erreur;
+	return $ok;
+}
diff --git a/verifier/siren.php b/verifier/siren.php
new file mode 100644
index 0000000000000000000000000000000000000000..2c7d28892717b607739781ed9427a4af5d9781a4
--- /dev/null
+++ b/verifier/siren.php
@@ -0,0 +1,31 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * 1/ Un SIREN comporte STRICTEMENT 9 caractères
+ * 1b/ Un SIRET comporte strictement 14 caractères
+ * 2/ Un siren/siret utilise une clef de controle "1-2"
+ *    Un siren/siret est donc valide si la somme des chiffres paires
+ *    + la somme du double de tous les chiffres impairs (16 = 1+6 = 7) est un multiple de 10
+ */
+
+function verifier_siren_dist($valeur, $options=array()){
+	$erreur = _T('verifier:erreur_siren');
+	$ok = '';
+
+	// Si pas 9 caractère, c'est déjà foiré !
+	if(!preg_match('/^[0-9]{9}$/',$valeur)) return $erreur;
+	
+	// On vérifie la clef de controle "1-2"
+	$somme = 0;
+	$i = 0; // Les impaires
+	while($i < 9){ $somme += $valeur[$i]; $i+=2; }
+	$i = 1; // Les paires !
+	while($i < 9){ if((2*$valeur[$i])>9) $somme += (2*$valeur[$i])-9; else $somme += 2*$valeur[$i]; $i+=2; }
+	
+	if($somme % 10) return $erreur;
+	
+	return $ok;
+}
diff --git a/verifier/siret.php b/verifier/siret.php
new file mode 100644
index 0000000000000000000000000000000000000000..43d5d5778d8e0492c3ab93598f8ef5d604d4b04f
--- /dev/null
+++ b/verifier/siret.php
@@ -0,0 +1,33 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * 1/ Un SIREN comporte STRICTEMENT 9 caractères
+ * 1b/ Un SIRET comporte strictement 14 caractères
+ * 2/ Un siren/siret utilise une clef de controle "1-2"
+ *    Un siren/siret est donc valide si la somme des chiffres paires
+ *    + la somme du double de tous les chiffres impairs (16 = 1+6 = 7) est un multiple de 10
+ */
+
+function verifier_siret_dist($valeur, $options=array()){
+	$erreur = _T('verifier:erreur_siret');
+	$ok = '';
+
+	// Si pas 14 caractère, c'est déjà foiré !
+	if(!preg_match('/^[0-9]{14}$/',$valeur)) return $erreur;
+	if(preg_match('/[0]{8}/',$valeur)) return $erreur;
+
+	// Pour le SIRET on vérifie la clef de controle "1-2" avec les impaires *2
+	// (vs pairs*2 pour SIREN, parce qu'on part de la fin)
+	$somme = 0;
+	$i = 1; // Les paires
+	while($i < 14){ $somme += $valeur[$i]; $i+=2; }
+	$i = 0; // Les impaires !
+	while($i < 14){ if((2*$valeur[$i])>9) $somme += (2*$valeur[$i])-9; else $somme += 2*$valeur[$i]; $i+=2; }
+	
+	if($somme % 10) return $erreur;
+	
+	return $ok;
+}
diff --git a/verifier/taille.php b/verifier/taille.php
new file mode 100644
index 0000000000000000000000000000000000000000..95e7a8559780b9253f215966fa48c725fb68e2ce
--- /dev/null
+++ b/verifier/taille.php
@@ -0,0 +1,31 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Vérifier une taille minimale/maximale, pour un mot de passe par exemple
+ */
+
+function verifier_taille_dist($valeur, $options=array()){
+	$ok = true;
+	$erreur = '';
+	
+	if (isset($options['min']))
+		$ok = ($ok and (strlen($valeur) >= $options['min']));
+	
+	if (isset($options['max'])){
+		$ok = ($ok and (strlen($valeur) <= $options['max']));
+	}
+	
+	if (!$ok){
+		if (isset($options['min']) and isset($options['max']))
+			$erreur = _T('verifier:erreur_taille_entre', $options);
+		elseif (isset($options['max']))
+			$erreur = _T('verifier:erreur_taille_max', $options);
+		else
+			$erreur = _T('verifier:erreur_taille_min', $options);
+	}
+	
+	return $erreur;
+}
diff --git a/verifier/telephone_fr.php b/verifier/telephone_fr.php
new file mode 100644
index 0000000000000000000000000000000000000000..a2981ef4c2bb02f47a66800238c965c885cc8713
--- /dev/null
+++ b/verifier/telephone_fr.php
@@ -0,0 +1,23 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Un nombre est composé de chiffres
+ */
+
+function verifier_telephone_fr_dist($valeur, $options=array()){
+	$erreur = _T('verifier:erreur_telephone');
+	$ok = '';
+	// On accepte differentes notations, les points, les tirets, les espaces, les slashes
+	$tel = ereg_replace("\.|/|-| ",'',$valeur);
+
+	// On interdit les 000 etc. mais je pense qu'on peut faire plus malin
+	// TODO finaliser les numéros à la con
+	if($tel == '0000000000') return $erreur;
+	
+	if(!preg_match("/^0[0-9]{9}$/",$tel)) return $erreur;
+	
+	return $ok;
+}
diff --git a/verifier/url.php b/verifier/url.php
new file mode 100644
index 0000000000000000000000000000000000000000..4539556f77fed0855ddd94f34d27358a9463a011
--- /dev/null
+++ b/verifier/url.php
@@ -0,0 +1,20 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Une URL commence par HTTP:// contient un domaine, etc.
+ * Doit pouvoir recevoir en option le protocole (ou pas) FTP SSH SFTP HTTP etc.
+ * Si pas de protocole spécifié, commencer à :// ??
+ */
+function verifier_url_dist($valeur, $options=array()){
+	$erreur = _T('verifier:erreur_url');
+	$ok = '';
+
+	/*
+		TODO Faire une belle RegExp
+	*/
+
+	return $ok;
+}