atreiju: Anonymisierung von Namen

Hallöchen,

ich möchte Namen, die in einer Liste stehen, anonymisieren, aber trotzdem noch statistisch erfassbar lassen (wie oft kommt Herr "Hans Müller" in der Liste vor).

Ich denke, dafür ist eine Hash-Funktion sinnvoll?

Kennt jemand eine einfache Hash-Funktion, die in diesem Fall sinnvoll ist?

Gibt es bereits etwas in PHP eingebaut? Oder eine fertige Funktion, die ich dafür nehmen könnte?

Viele Grüße, Atreiju

  1. Moin,

    die Daten sollten in ihrem Ursprungszustand gespeichert werden.
    Als Ausgabe kannst du die durch jegliche Hashfunktionen jagen wie du willst. Somit ist die Ausgabe verschleiert, du kannst aber nach wie vor noch Berechnungen mit den Namen vornehmen.

    Gruß
    Hash ist doch schon legalisiert?
    T-Rex

    1. Hallo,

      die Daten sollten in ihrem Ursprungszustand gespeichert werden.

      in den meisten Fällen würde ich zustimmen, aber ... Es kommt auf den Zweck an.
      Wenn es wirklich nur um eine statistische Auswertung geht -und so habe ich atreiju verstanden- dann ist es nicht notwendig, die Namen im Original zu speichern. Ein Hash, meinetwegen getrennt auf Vor- und Nachnamen, ist ebenso eindeutig wie der Name selbst und kann für statistische Zwecke herangezogen werden.

      Nur eins ist dann nicht mehr möglich: Aus 38E2AF70C346D711F64C ablesen, dass "Meier" der häufigste Name ist.

      Die Frage ist also tatsächlich: Was soll alles mit den Namen passieren?
      Nur eine Zählung? Dann würde ich ein PHP-Array vorschlagen und die Namen als Key verwenden, die Häufigkeit als Wert.

      function RegisterName($name, $list)  
       { if (isset($list[$name])  
            $list[$name]++;  
         else  
            $list[$name] = 1;  
       }
      

      So ist jeder Name aus dem Kontext gerissen und damit anonymisiert, erst recht wenn man das tatsächlich nach Vor- und Nachname getrennt zählt.

      Hash ist doch schon legalisiert?

      Was meinst du damit?

      Ciao,
       Martin

      --
      Most experts agree: Any feature of a program that you can't turn off if you want to, is a bug.
      Except with Microsoft, where it is just the other way round.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Da hast du recht. Meine Erfahrung sagt mir jedoch, dass man lieber mehr als weniger speichern sollte. Irgendwann kommt der Kunde/Chef an und fragt "können wir eigentlich ermitteln welcher Nachname der häufigste ist?". Dann kommt ein klares nein mit verweis auf Dokumentation xy. Trotzdem gibt es eine Enttäuschung.

        Ansonsten hast du natürlich recht.

        Gruß
        Hash ~ Hasch *ein Wortspiel*
        T-Rex

        1. Hi,

          Da hast du recht. Meine Erfahrung sagt mir jedoch, dass man lieber mehr als weniger speichern sollte. Irgendwann kommt der Kunde/Chef an und fragt "können wir eigentlich ermitteln welcher Nachname der häufigste ist?". Dann kommt ein klares nein mit verweis auf Dokumentation xy. Trotzdem gibt es eine Enttäuschung.

          daher mein Alternativvorschlag mit der Häufigkeits-Liste und Klartextnamen.
          Dann lautet die Antwort: "Klar, Chef! *klick, klick, klick* Hier, ich hab's: Meier. 26mal."
          Nur wie die 26 Meiers alle mit Vornamen heißen, weiß man dann nicht mehr. Aber braucht man das? ;-)

          Ciao,
           Martin

          --
          Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
          Heißes Wasser kann man immer gebrauchen.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        2. Irgendwann kommt der Kunde/Chef an und fragt "können wir eigentlich ermitteln welcher Nachname der häufigste ist?".

          Wenn der Wunsch wirklich ist, auch für die interne Datenhaltung keinen Namen mehr erkennbar zu haben, dann muss dem Kunden klar sein dass sowas dann nicht mehr zu ermitteln ist.
          Sowas sollte man im Voraus ansprechen, man könnte in beiden Fällen spätere Probleme bekommen.

          1. Das kann man noch so oft ansprechen. Am Ende guckt der Kunde doch doof aus der Wäsche oder der Chef. Dann will wieder niemand was von den Warnungen gehört haben.

            Gruß
            Vorausdenkender
            T-Rex

  2. Hi,

    Ich denke, dafür ist eine Hash-Funktion sinnvoll?

    jop, echo -n "Hans Müller" | md5sum wird immer den selben Hash erzeugen.
    In der Tabelle steht dann allerdings nicht "Hans Müller existiert 20x", sondern "der Hash 977b3b5ffc17536b4f515bb90890df6a existiert 20x".
    Beachte auch, dass die kleinste Abweichung (Klein-/Großschreibung, ue statt ü, ...) für einen komplett anderen Hash sorgt.

    Gibt es bereits etwas in PHP eingebaut? Oder eine fertige Funktion, die ich dafür nehmen könnte?

    Bestimmt.

    Martin