diff --git a/formidable_options.php b/formidable_options.php
index c8b59e4c7e8027ac653021b3dcaa8ee565ad926f..19f1cea69137a1b5da3e9363032c3be2c64e7b82 100644
--- a/formidable_options.php
+++ b/formidable_options.php
@@ -84,6 +84,16 @@ $GLOBALS['formulaires']['editer_formulaire'] = array(
     )
 );
 
+/* déclaration des différentes variables utilisées pour effectuer l'anonymisation */
+$GLOBALS['formulaires']['variables_anonymisation'] = array(
+	'remote_user' => '$_SERVER["REMOTE_USER"]',
+	'php_auth_user' => '$_SERVER["PHP_AUTH_USER"]',
+);
+
+$GLOBALS['formulaires']['passwd'] = array(
+	'interne' => 'palabresecreta',
+);
+
 $GLOBALS['formulaires']['autoriser_admin_restreint'] = false;
 
 if (!function_exists('array_fill_keys')) {
diff --git a/formulaires/formidable.html b/formulaires/formidable.html
index b5f9f99fa080da6bb7c0a8b5b4b2ab021233f4d0..65f288904aa9d38daeb39b83d5a5bb7754538657 100644
--- a/formulaires/formidable.html
+++ b/formulaires/formidable.html
@@ -2,6 +2,11 @@
     [(#REM) Afficher du HTML si prévu par un plugin ou pour les stats ]
     [(#ENV**{_remplacer_formulaire})]
 </BOUCLE_remplacer_le_formulaire>
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#ENV{id}}>
+	[(#SET{enregistrement,[(#TRAITEMENTS**|unserialize|table_valeur{'enregistrement'})]})]
+	[(#SET{anonymiser,[(#GET{enregistrement}|table_valeur{'anonymiser'})]})]
+	[(#GET{anonymiser}|=={on}|oui)<h3><:formidable:formulaire_anonyme_explication:>]</h3>
+</BOUCLE_formulaire>
 <div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
     [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
     [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
diff --git a/formulaires/formidable.php b/formulaires/formidable.php
index 1ff68b16d85a2e61831f7e05c8582e0e4e1a5d25..4198c4682596725e32514b82fc2dfd6033e46b8e 100644
--- a/formulaires/formidable.php
+++ b/formulaires/formidable.php
@@ -90,12 +90,17 @@ function formulaires_formidable_charger($id_formulaire, $valeurs=array(), $id_fo
                 }
             } else {
 
+                // calcul des paramètres d'anonymisation
+                $anonymisation = (isset($options['anonymiser']) && $options['anonymiser'] == true)
+                    ? isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : ''
+                    : '';
+
                 // Si multiple = non mais que c'est modifiable, alors on va chercher
                 // la dernière réponse si elle existe
                 if ($options = $traitements['enregistrement']
                     and !$options['multiple']
                     and $options['modifiable']
-                    and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options['identification'])
+                    and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options['identification'], $anonymisation)
                 ){
                     $id_formulaires_reponse = array_pop($reponses);
                     $contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
diff --git a/inc/formidable.php b/inc/formidable.php
index 187d8d99a1da8384441c9e4ef11b6e281d8228cf..d50971f880e6979d37b86fabe2f97509a8f6caed 100644
--- a/inc/formidable.php
+++ b/inc/formidable.php
@@ -95,14 +95,26 @@ function formidable_generer_nom_cookie($id_formulaire){
  *
  * @param int $id_formulaire L'identifiant du formulaire
  * @param string $choix_identification Comment verifier une reponse. Priorite sur 'cookie' ou sur 'id_auteur'
+ * @param string $anonymisation : vaut '' si le formulaire n'est pas anonymisé, sinon c'est la variable d'anonymisation
  * @return unknown_type Retourne un tableau contenant les id des réponses si elles existent, sinon false
  */
-function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification='cookie'){
+function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification='cookie', $anonymisation=''){
     global $auteur_session;
     $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
     $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
     $cookie = isset($_COOKIE[$nom_cookie]) ? $_COOKIE[$nom_cookie] : false;
 
+    $anonymiser = ($anonymisation == '') ? false : true;
+    if ($anonymiser) $anonymiser_variable = $anonymisation;
+
+    // traitement de l'anonymisation
+    if ($anonymiser) {
+        // mod de l'id_auteur
+        $variables_anonymisation =
+                $GLOBALS['formulaires']['variables_anonymisation'][$anonymiser_variable];
+        $id = eval("return $variables_anonymisation;");
+        $id_auteur = formidable_scramble($id);
+    }
     // ni cookie ni id, on ne peut rien faire
     if (!$cookie and !$id_auteur) {
         return false;
@@ -111,17 +123,17 @@ function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identific
     // priorite sur le cookie
     if ($choix_identification == 'cookie' or !$choix_identification) {
         if ($cookie)
-            $where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.intval($id_auteur).')' : ')');
+            $where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
         else
-            $where = 'id_auteur='.intval($id_auteur);
+            $where = 'id_auteur='.$id_auteur;
     }
 
     // sinon sur l'id_auteur
     else {
         if ($id_auteur)
-            $where = 'id_auteur='.intval($id_auteur);
+            $where = 'id_auteur='.$id_auteur;
         else
-            $where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.intval($id_auteur).')' : ')');
+            $where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
     }
 
     $reponses = sql_allfetsel(
@@ -317,4 +329,50 @@ function titre_nb_reponses($nb) {
     return _T('formidable:reponses_nb', array('nb' => $nb));
 }
 
+/**
+ * Transforme le hash MD5 en une valeur numérique unique
+ *
+ * trouvé ici : http://stackoverflow.com/questions/1422725/represent-md5-hash-as-an-integer
+ * @param string $hex_str La valeur alphanumérique à transformer
+ * @return string Valeur numérique
+*/
+function md5_hex_to_dec($hex_str) {
+    $arr = str_split($hex_str, 4);
+    foreach ($arr as $grp) {
+        $dec[] = str_pad(hexdec($grp), 5, '0', STR_PAD_LEFT);
+    }
+
+    /* on s'assure que $result ne commence pas par un zero */
+    $result = implode('', $dec);
+    for ($cpt = 0 ; $cpt < strlen($result) ; $cpt++) {
+        if ($result[$cpt] != '0') break;
+    }
+    $result = substr($result, $cpt);
+    return $result;
+}
+
+/**
+ * Transforme un login en une valeur numérique de 19 caractères
+ *
+ * NOTE: il devient impossible de retrouver la valeur d'origine car le HASH
+ * est coupé à 19cars et est donc incomplet. L'unicité n'est pas garantie mais
+ * les chances pour que deux logins tombent sur le même HASH sont de 1 sur
+ * 10 milliards de milliards
+ * A la fin, on recherche et supprime les éventuels zéros de début
+ * @param string $login Login à transformer
+ * @param string $passwd Chaîne 'secrète' ajoutée au login et id_formulaire pour éviter
+ *  les recoupements d'identité entre plusieurs formulaires
+ * @return string Un nombre de 19 chiffres
+*/
+function formidable_scramble($login, $passwd = '') {
+    $id_form = (isset($flux['args']['id_form']) ? $flux['args']['id_form'] : '');
+    if ($passwd == '')
+        $passwd = $GLOBALS['formulaires']['passwd']['interne'];
+    $login_md5 = md5("$login$passwd$id_form");
+    $login_num = md5_hex_to_dec($login_md5);
+    $login_num = substr($login_num, 0, 19);
+
+    return $login_num;
+}
+
 ?>
diff --git a/traiter/enregistrement.php b/traiter/enregistrement.php
index 4a5115af7ace5aab0f768a8a12e4a909c1dda910..8277067c48b64356067c28927d71634682334b2c 100644
--- a/traiter/enregistrement.php
+++ b/traiter/enregistrement.php
@@ -16,6 +16,14 @@ function traiter_enregistrement_dist($args, $retours){
     global $auteur_session;
     $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
 
+    // traitement de l'anonymisation
+    if ($options['anonymiser'] == 'on') {
+        // mod de l'id_auteur
+        $variables_anonymisation =
+            $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
+        $id = eval("return $variables_anonymisation;");
+        $id_auteur = formidable_scramble($id);
+    }
     // On cherche le cookie et sinon on le crée
     $nom_cookie = formidable_generer_nom_cookie($id_formulaire);
     if (isset($_COOKIE[$nom_cookie]))
diff --git a/traiter/enregistrement.yaml b/traiter/enregistrement.yaml
index 3fae3210633292047b494c64795a2cc709d11650..41c9ced81d11b7ff95abf4ff9452d69633417214 100644
--- a/traiter/enregistrement.yaml
+++ b/traiter/enregistrement.yaml
@@ -26,6 +26,24 @@ options:
         cookie: '<:formidable:identification_par_cookie:>'
         id_auteur: '<:formidable:identification_par_id_auteur:>'
       defaut: 'cookie'
+  -
+    saisie: 'oui_non'
+    options:
+      nom: 'anonymiser'
+      label: '<:formidable:traiter_enregistrement_option_anonymiser_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_anonymiser_explication:>'
+      defaut: ''
+  -
+    saisie: 'selection'
+    options:
+      option_intro: '<:formidable:traiter_enregistrement_option_choix_select_label:>'
+      nom: 'anonymiser_variable'
+      label: '<:formidable:traiter_enregistrement_option_anonymiser_variable_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_anonymiser_variable_explication:>'
+      datas:
+        remote_user: "Variable serveur : REMOTE_USER"
+        php_auth_user: "Variable serveur : PHP_AUTH_USER"
+      defaut: ''
   -
     saisie: 'radio'
     options: