diff --git a/.gitattributes b/.gitattributes
index eda6a4ec7166f07a0cdc62326febd608428404a1..b1237b8cd4f5af6442b0cfbd80480d4fe32d38d1 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -26,6 +26,8 @@ lang/verifier_sk.php -text
 test/verifier.html -text
 verifier/code_postal.php -text
 verifier/comparaison_champ.php -text
+verifier/couleur.php -text
+verifier/couleur.yaml -text
 verifier/date.php -text
 verifier/date.yaml -text
 verifier/decimal.php -text
diff --git a/lang/paquet-verifier_fr.php b/lang/paquet-verifier_fr.php
index 5fac119348b91e3155a8ab65ea3f0f6974ddb922..ebf16f1013a6e71bc168d7fb96ceb7017785ff67 100644
--- a/lang/paquet-verifier_fr.php
+++ b/lang/paquet-verifier_fr.php
@@ -1,14 +1,14 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/verifier/lang/
-if (!defined('_ECRIRE_INC_VERSION')) return;
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-	// V
-	'verifier_description' => 'Fournit une fonction unique <code>verifier($valeur, $type, $options)</code> permettant de tester la validité d\'une valeur.',
-	'verifier_nom' => 'API de vérification',
-	'verifier_slogan' => 'Une API générique pour vérifier une valeur'
-);
-
-?>
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/verifier/lang/
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// V
+	'verifier_description' => 'Fournit une fonction unique <code>verifier($valeur, $type, $options, &$valeur_normalisee)</code> permettant de tester la validité d\'une valeur.',
+	'verifier_nom' => 'API de vérification',
+	'verifier_slogan' => 'Une API générique pour vérifier une valeur'
+);
+
+?>
diff --git a/lang/verifier_fr.php b/lang/verifier_fr.php
index 7925624ea0e515f2c86d74bde7912cf8ae72b081..15d7791c6020df04d5760597d242e870fd5d1f71 100644
--- a/lang/verifier_fr.php
+++ b/lang/verifier_fr.php
@@ -1,97 +1,103 @@
-<?php
-// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
-// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/verifier/lang/
-if (!defined('_ECRIRE_INC_VERSION')) return;
-
-$GLOBALS[$GLOBALS['idx_lang']] = array(
-
-	// E
-	'erreur_code_postal' => 'Ce code postal est incorrect.',
-	'erreur_comparaison_egal' => 'La valeur doit être égale au champ "@nom_champ@"',
-	'erreur_comparaison_egal_type' => 'La valeur doit être égale et de même type que le champ "@nom_champ@"',
-	'erreur_comparaison_grand' => 'La valeur doit être supérieure au champ "@nom_champ@"',
-	'erreur_comparaison_grand_egal' => 'La valeur doit être supérieure ou égale au champ "@nom_champ@"',
-	'erreur_comparaison_petit' => 'La valeur doit être inférieure au champ "@nom_champ@"',
-	'erreur_comparaison_petit_egal' => 'La valeur doit être inférieure ou égale au champ "@nom_champ@"',
-	'erreur_date' => 'La date n\'est pas valide.',
-	'erreur_date_format' => 'Le format de la date n\'est pas accepté.',
-	'erreur_decimal' => 'La valeur doit être un nombre décimal.',
-	'erreur_decimal_nb_decimales' => 'Le nombre ne doit pas avoir plus de @nb_decimales@ chiffres après la virgule.',
-	'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éjà utilisée.',
-	'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 supérieure à @min@.',
-	'erreur_id_document' => 'Cet identifiant de document n\'est pas valide.',
-	'erreur_inconnue_generique' => 'Le format n\'est pas correct.',
-	'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_egal' => 'La valeur doit comprendre exactement @egal@ caractères.',
-	'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 <em>@url@</em> n\'est pas valide.',
-	'erreur_url_protocole' => 'L\'adresse saisie <em>(@url@)</em> doit commencer par @protocole@',
-	'erreur_url_protocole_exact' => 'L\'adresse saisie <em>(@url@)</em> ne commence pas par un protocole valide (http:// par exemple)',
-
-	// N
-	'normaliser_option_date' => 'Normaliser la date ?',
-	'normaliser_option_date_aucune' => 'Non',
-	'normaliser_option_date_en_datetime' => 'Au format «Datetime» (pour SQL)',
-
-	// O
-	'option_decimal_nb_decimales_label' => 'Nombre de décimales après la virgule',
-	'option_email_disponible_label' => 'Adresse disponible',
-	'option_email_disponible_label_case' => 'Vérifier que l\'adresse n\'est pas déjà utilisée par un utilisateur',
-	'option_email_mode_5322' => 'Vérification la plus conforme aux standards disponibles',
-	'option_email_mode_label' => 'Mode de vérification des courriels',
-	'option_email_mode_normal' => 'Vérification normale de SPIP',
-	'option_email_mode_strict' => 'Vérification moins permissive',
-	'option_entier_max_label' => 'Valeur maximum',
-	'option_entier_min_label' => 'Valeur minimum',
-	'option_regex_modele_label' => 'La valeur doit correspondre au masque suivant',
-	'option_siren_siret_mode_label' => 'Que voulez-vous vérifier ?',
-	'option_siren_siret_mode_siren' => 'le SIREN',
-	'option_siren_siret_mode_siret' => 'le SIRET',
-	'option_taille_max_label' => 'Taille maximum',
-	'option_taille_min_label' => 'Taille minimum',
-	'option_url_mode_complet' => 'Vérification complète de l\'url',
-	'option_url_mode_label' => 'Mode de vérification des urls',
-	'option_url_mode_php_filter' => 'Vérification complète de l\'url via le filtre FILTER_VALIDATE_URL de php',
-	'option_url_mode_protocole_seul' => 'Vérification uniquement de la présence d\'un protocole',
-	'option_url_protocole_label' => 'Nom du protocole à vérifier',
-	'option_url_type_protocole_exact' => 'Saisir un protocole ci-dessous :',
-	'option_url_type_protocole_ftp' => 'Protocoles ftp : ftp ou sftp',
-	'option_url_type_protocole_label' => 'Type de protocole à vérifier',
-	'option_url_type_protocole_mail' => 'Protocoles mail : imap, pop3 ou smtp',
-	'option_url_type_protocole_tous' => 'Tous protocoles acceptés',
-	'option_url_type_protocole_web' => 'Protocoles web : http ou https',
-
-	// T
-	'type_date' => 'Date',
-	'type_date_description' => 'Vérifie que la valeur est une date au format JJ/MM/AAAA. Le séparateur est libre (&quot;.&quot;, &quot;/&quot;, etc).',
-	'type_decimal' => 'Nombre décimal',
-	'type_decimal_description' => 'Vérifie que la valeur est un nombre décimal, avec la possibilité de restreindre entre deux valeurs et de préciser le nombre de décimales après la virgule.',
-	'type_email' => 'Adresse de courriel',
-	'type_email_description' => 'Vérifie que l\'adresse de courriel a un format correct.',
-	'type_email_disponible' => 'Disponibilité d\'une adresse de courriel',
-	'type_email_disponible_description' => 'Vérifie que l\'adresse de courriel n\'est pas déjà utilisé par un autre utilisateur du système.',
-	'type_entier' => 'Nombre entier',
-	'type_entier_description' => 'Vérifie que la valeur est un entier, avec la possibilité de restreindre entre deux valeurs.',
-	'type_regex' => 'Expression régulière',
-	'type_regex_description' => 'Vérifie que la valeur correspond au masque demandé. Pour l\'utilisation des masques, reportez-vous à <a href="http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php">l\'aide en ligne de PHP</a>.',
-	'type_siren_siret' => 'SIREN ou SIRET',
-	'type_siren_siret_description' => 'Vérifie que la valeur est un numéro valide du <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> français.',
-	'type_taille' => 'Taille',
-	'type_taille_description' => 'Vérifie que la taille de la valeur correspond au minimum et/ou au maximum demandé.',
-	'type_telephone' => 'Numéro de téléphone',
-	'type_telephone_description' => 'Vérifie que le numéro de téléphone correspond à un schéma reconnu.',
-	'type_url' => 'URL',
-	'type_url_description' => 'Vérifie que l\'url correspond à un schéma reconnu.'
-);
-
-?>
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/verifier/lang/
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// E
+	'erreur_code_postal' => 'Ce code postal est incorrect.',
+	'erreur_comparaison_egal' => 'La valeur doit être égale au champ "@nom_champ@"',
+	'erreur_comparaison_egal_type' => 'La valeur doit être égale et de même type que le champ "@nom_champ@"',
+	'erreur_comparaison_grand' => 'La valeur doit être supérieure au champ "@nom_champ@"',
+	'erreur_comparaison_grand_egal' => 'La valeur doit être supérieure ou égale au champ "@nom_champ@"',
+	'erreur_comparaison_petit' => 'La valeur doit être inférieure au champ "@nom_champ@"',
+	'erreur_comparaison_petit_egal' => 'La valeur doit être inférieure ou égale au champ "@nom_champ@"',
+	'erreur_couleur' => 'Le code couleur n\'est pas valide.',
+	'erreur_date' => 'La date n\'est pas valide.',
+	'erreur_date_format' => 'Le format de la date n\'est pas accepté.',
+	'erreur_decimal' => 'La valeur doit être un nombre décimal.',
+	'erreur_decimal_nb_decimales' => 'Le nombre ne doit pas avoir plus de @nb_decimales@ chiffres après la virgule.',
+	'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éjà utilisée.',
+	'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 supérieure à @min@.',
+	'erreur_id_document' => 'Cet identifiant de document n\'est pas valide.',
+	'erreur_inconnue_generique' => 'Le format n\'est pas correct.',
+	'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_egal' => 'La valeur doit comprendre exactement @egal@ caractères.',
+	'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 <em>@url@</em> n\'est pas valide.',
+	'erreur_url_protocole' => 'L\'adresse saisie <em>(@url@)</em> doit commencer par @protocole@',
+	'erreur_url_protocole_exact' => 'L\'adresse saisie <em>(@url@)</em> ne commence pas par un protocole valide (http:// par exemple)',
+
+	// N
+	'normaliser_option_date' => 'Normaliser la date ?',
+	'normaliser_option_date_aucune' => 'Non',
+	'normaliser_option_date_en_datetime' => 'Au format «Datetime» (pour SQL)',
+
+	// O
+	'option_couleur_normaliser_label' => 'Normaliser le code couleur ?',
+	'option_couleur_type_hexa' => 'Code couleur au format héxadécimal',
+	'option_couleur_type_label' => 'Type de vérification à effectuer',
+	'option_decimal_nb_decimales_label' => 'Nombre de décimales après la virgule',
+	'option_email_disponible_label' => 'Adresse disponible',
+	'option_email_disponible_label_case' => 'Vérifier que l\'adresse n\'est pas déjà utilisée par un utilisateur',
+	'option_email_mode_5322' => 'Vérification la plus conforme aux standards disponibles',
+	'option_email_mode_label' => 'Mode de vérification des courriels',
+	'option_email_mode_normal' => 'Vérification normale de SPIP',
+	'option_email_mode_strict' => 'Vérification moins permissive',
+	'option_entier_max_label' => 'Valeur maximum',
+	'option_entier_min_label' => 'Valeur minimum',
+	'option_regex_modele_label' => 'La valeur doit correspondre au masque suivant',
+	'option_siren_siret_mode_label' => 'Que voulez-vous vérifier ?',
+	'option_siren_siret_mode_siren' => 'le SIREN',
+	'option_siren_siret_mode_siret' => 'le SIRET',
+	'option_taille_max_label' => 'Taille maximum',
+	'option_taille_min_label' => 'Taille minimum',
+	'option_url_mode_complet' => 'Vérification complète de l\'url',
+	'option_url_mode_label' => 'Mode de vérification des urls',
+	'option_url_mode_php_filter' => 'Vérification complète de l\'url via le filtre FILTER_VALIDATE_URL de php',
+	'option_url_mode_protocole_seul' => 'Vérification uniquement de la présence d\'un protocole',
+	'option_url_protocole_label' => 'Nom du protocole à vérifier',
+	'option_url_type_protocole_exact' => 'Saisir un protocole ci-dessous :',
+	'option_url_type_protocole_ftp' => 'Protocoles ftp : ftp ou sftp',
+	'option_url_type_protocole_label' => 'Type de protocole à vérifier',
+	'option_url_type_protocole_mail' => 'Protocoles mail : imap, pop3 ou smtp',
+	'option_url_type_protocole_tous' => 'Tous protocoles acceptés',
+	'option_url_type_protocole_web' => 'Protocoles web : http ou https',
+
+	// T
+	'type_couleur' => 'Couleur',
+	'type_couleur_description' => 'Vérifie que la valeur est un code couleur.',
+	'type_date' => 'Date',
+	'type_date_description' => 'Vérifie que la valeur est une date au format JJ/MM/AAAA. Le séparateur est libre (&quot;.&quot;, &quot;/&quot;, etc).',
+	'type_decimal' => 'Nombre décimal',
+	'type_decimal_description' => 'Vérifie que la valeur est un nombre décimal, avec la possibilité de restreindre entre deux valeurs et de préciser le nombre de décimales après la virgule.',
+	'type_email' => 'Adresse de courriel',
+	'type_email_description' => 'Vérifie que l\'adresse de courriel a un format correct.',
+	'type_email_disponible' => 'Disponibilité d\'une adresse de courriel',
+	'type_email_disponible_description' => 'Vérifie que l\'adresse de courriel n\'est pas déjà utilisé par un autre utilisateur du système.',
+	'type_entier' => 'Nombre entier',
+	'type_entier_description' => 'Vérifie que la valeur est un entier, avec la possibilité de restreindre entre deux valeurs.',
+	'type_regex' => 'Expression régulière',
+	'type_regex_description' => 'Vérifie que la valeur correspond au masque demandé. Pour l\'utilisation des masques, reportez-vous à <a href="http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php">l\'aide en ligne de PHP</a>.',
+	'type_siren_siret' => 'SIREN ou SIRET',
+	'type_siren_siret_description' => 'Vérifie que la valeur est un numéro valide du <a href="http://fr.wikipedia.org/wiki/SIREN">Système d’Identification du Répertoire des ENtreprises</a> français.',
+	'type_taille' => 'Taille',
+	'type_taille_description' => 'Vérifie que la taille de la valeur correspond au minimum et/ou au maximum demandé.',
+	'type_telephone' => 'Numéro de téléphone',
+	'type_telephone_description' => 'Vérifie que le numéro de téléphone correspond à un schéma reconnu.',
+	'type_url' => 'URL',
+	'type_url_description' => 'Vérifie que l\'url correspond à un schéma reconnu.'
+);
+
+?>
diff --git a/paquet.xml b/paquet.xml
index 78ed76d2b9a44eb162eac3439708f43a3fa60944..2af287a00d92881bac7aa1e12cbf076c2783948d 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -1,23 +1,23 @@
-<paquet
-	prefix="verifier"
-	categorie="outil"
-	version="0.1.13"
-	etat="test"
-	compatibilite="[2.0.10;3.0.99]"
-	logo="images/verifier-128.png"
-	documentation="http://www.spip-contrib.net/Verifier,1505"
->
-
-	<nom>API de v&#233;rification</nom>
-	<!-- Une API générique pour vérifier une valeur -->
-
-	<auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>
-
-	<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
-
-	<traduire module="verifier" reference="fr" gestionnaire="salvatore" />
-
-	<pipeline nom="verifier" action="verifier_verifier" inclure="verifier_pipelines.php" />
-
-	<utilise nom="yaml" />
-</paquet>
+<paquet
+	prefix="verifier"
+	categorie="outil"
+	version="0.1.14"
+	etat="test"
+	compatibilite="[2.0.10;3.0.99]"
+	logo="images/verifier-128.png"
+	documentation="http://www.spip-contrib.net/Verifier,1505"
+>
+
+	<nom>API de v&#233;rification</nom>
+	<!-- Une API générique pour vérifier une valeur -->
+
+	<auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>
+
+	<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
+
+	<traduire module="verifier" reference="fr" gestionnaire="salvatore" />
+
+	<pipeline nom="verifier" action="verifier_verifier" inclure="verifier_pipelines.php" />
+
+	<utilise nom="yaml" />
+</paquet>
diff --git a/plugin.xml b/plugin.xml
index 0b3a5630753057dd875891d26dd04520a5823bf9..fb22e2703d2ebf8bcde91c9cabe83a2da21e3d7e 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -9,12 +9,12 @@
 	<auteur>[Les Développements Durables->http://www.ldd.fr]</auteur>
 	<icon>images/verifier-128.png</icon>
 	<licence>GPL v3</licence>
-	<version>0.1.13</version>
+	<version>0.1.14</version>
 	<etat>test</etat>
 	<description>
 		<multi>
-			[fr]Fournit une fonction unique <code>verifier($valeur, $type, $options)</code> permettant de tester la validit&#233; d'une valeur.
-			[en]Provides a unique function <code>verifier($value, $type, $options)</code> to test the validity of a value.
+			[fr]Fournit une fonction unique <code>verifier($valeur, $type, $options, &$valeur_normalisee)</code> permettant de tester la validit&#233; d'une valeur.
+			[en]Provides a unique function <code>verifier($value, $type, $options, &$valeur_normalisee)</code> to test the validity of a value.
 		</multi>
 	</description>
 	<prefix>verifier</prefix>
diff --git a/verifier/couleur.php b/verifier/couleur.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a0a52720a326b7840bef14dbfc83e2a8a55cfc5
--- /dev/null
+++ b/verifier/couleur.php
@@ -0,0 +1,40 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Vérifie la validité d'un code couleur
+ * 
+ * @param string $valeur
+ *   La valeur à vérifier.
+ * @param array $options
+ *   type => hexa,...
+ *   normaliser => oui ou rien
+ * @param null $valeur_normalisee
+ *   Si normalisation a faire, la variable sera rempli par la couleur normalisee.
+ * @return string
+ *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
+ */
+function verifier_couleur_dist($valeur, $options=array(), &$valeur_normalisee=null){
+	$erreur = _T('verifier:erreur_couleur');
+	if (!is_string($valeur))
+		return $erreur;
+
+	$ok = '';
+	switch ($options['type']){
+		case 'hexa':
+		default:
+			if (!preg_match(",^#[a-f0-9]{6}$,i", $valeur))
+				if ($options['normaliser'] and preg_match(",^[a-f0-9]{6}$,i", $valeur))
+					$valeur_normalisee = "#".$valeur ;
+				else
+					return $erreur;
+			break;
+	}
+			spip_log("valeur $valeur valeur_normalisee $valeur_normalisee options ".print_r($options,true),"couleur");
+
+	return $ok;
+}
+
+?> 
\ No newline at end of file
diff --git a/verifier/couleur.yaml b/verifier/couleur.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f20e507d1470a5ed3ed4a681128de50f0a140229
--- /dev/null
+++ b/verifier/couleur.yaml
@@ -0,0 +1,18 @@
+
+titre: '<:verifier:type_couleur:>'
+description: '<:verifier:type_couleur_description:>'
+options:
+  -
+    saisie: 'radio'
+    options:
+      nom: 'type'
+      label: '<:verifier:option_couleur_type_label:>'
+      datas:
+        hexa: '<:verifier:option_couleur_type_hexa:>'
+      defaut: 'hexa'
+  -
+    saisie: 'oui_non'
+    options:
+      nom: 'normaliser'
+      label: '<:verifier:option_couleur_normaliser_label:>'
+      defaut: ''