RSS Feed abonnieren

Adressgenerator

27. November 2009

Ich mag Personensuchmaschinen nicht. Also warum nicht mal spaßeshalber einen Generator für zufällige Personen bzw. Adressen bauen? Nette Idee wie ich fand, also mal schnell was zusammen gefummelt.

Die nachfolgende PHP-Klasse erzeugt eine zufällige Adresse. Dazu werden die Textdateien benötigt, in welchen ich in Handarbeit Namen, Straßennamen sowie Postleitzahlen und Orte (unabhängig voreinander) zusammengesammelt habe. Aus diesem Pool generiert die PHP-Klasse einen zufällige Namen mit Postanschrift.

Bei diesen so erzeugten Adressen paßt jeweils die Postleitzahl auch zum Ort. Möchte jemand die Echtheit einer solchen Fake-Adresse überprüfen bzw. feststellen ob dies ein Fake ist, bräuchte er eine gute Datenbank über alle Straßennamen vor Ort bzw. echte Adressdaten zum Abgleich. Es läßt sich also mit hoher Wahrscheinlichkeit nicht technisch feststellen, ob es sich um eine echte Adresse handelt. Natürlich wird es auch seltene Fälle geben wo die Person und deren Adresse wirklich stimmt. Das bleibt allerdings dem Zufall überlassen.

Folgende Datensätze sind enthalten

Damit sind rein rechnerisch ~1.000.000.000.000.000 verschiedene Personen generierbar, wenn man die Hausnummern noch nicht einmal in die Rechnung mit einbezieht.

Bei den Vor- und Nachnamen habe ich versucht darauf zu achten, dass sie nicht all zu exotisch sind. Ich hoffe es ist gelungen. Wer die Daten einsetzt, sollte prüfen ob sein Namen darin vorkommt und ihn nötigenfalls nachtragen.

Lizenz gibt es keine – macht damit was ihr wollt. Ich würde mich allerdings über einen Link auf meine Seite freuen.

Viel Spaß beim Spielen ;)

Quellcode der PHP-Klasse

<?php
 
class Adresse {
 
    // Dateien sind in uft-8
    var $fileVornamenFrau    = './vornamen_frau.txt';
    var $fileVornamenMann    = './vornamen_mann.txt';
    var $fileVornamenEgal    = './vornamen_egal.txt';
    var $fileNachnamen        = './nachnamen.txt';
    var $fileStrassen        = './strassen.txt';
    var $filePlzOrt            = './plz-ort.txt';
 
    // $geschlecht=0 -> egal
    // $geschlecht=1 -> Mann
    // $geschlecht=2 -> Frau
    // return array
    function get($geschlecht=0) {
        return array(
            'vorname'=>$this->getVorname($geschlecht),
            'nachname'=>$this->getNachname(),
            'strasse'=>$this->getStrasse(),
            'nummer'=>$this->getHausnummer(),
            'ort'=>$this->getPlzOrt()
        );
    }
 
    // $geschlecht=0 -> egal
    // $geschlecht=1 -> Mann
    // $geschlecht=2 -> Frau
    // return string
    function getHTML($geschlecht=0) {
        return '<address>'."\n".
             $this->getVorname($geschlecht).' '.$this->getNachname().'<br />'."\n".
            $this->getStrasse().' '.$this->getHausnummer().'<br />'."\n".
            $this->getPlzOrt()."\n".
            '</address>'."\n";
    }
 
    /* ---------------------------------- internal -------------------------------------- */
 
    // $geschlecht=0 -> egal
    // $geschlecht=1 -> Mann
    // $geschlecht=2 -> Frau
    // return string
    function getVorname($geschlecht=0) {
        switch ($geschlecht) {
            case 1:
                return $this->_getRandomLine($this->fileVornamenMann);
                break;
            case 2:
                return $this->_getRandomLine($this->fileVornamenFrau);
                break;
            default:
                return $this->_getRandomLine($this->fileVornamenEgal);
        }
    }
 
    // return string
    function getNachname() {
        return $this->_getRandomLine($this->fileNachnamen);
    }
 
    // return string
    function getHausnummer($min=1,$max=99) {
        $result = rand($min,$max);
        if (rand(0,100)<=20) {
            // fügt mit 20% Wahrscheinlichkeit 
            // einen Buchstaben zur Nummer hinzu
            $buchstaben = array('a','b','c');
            $result .= $buchstaben[rand(0,(count($buchstaben)-1))];
        }
        return $result.'';
    }
 
    // return string
    function getStrasse() {
        return $this->_getRandomLine($this->fileStrassen);
    }
 
    // return string
    function getPlzOrt() {
        return $this->_getRandomLine($this->filePlzOrt);
    }
 
    // return string
    function _getRandomLine($file) {
        $list = @file($file);
        if (!is_array($list) || count($list) < 1) return false;
        return trim($list[rand(0,(count($list)-1))]);
    }
}
 
?>

Tags: ,

15 Antworten zu “Adressgenerator”

  1. Freya
    12. Januar 2010 um 22:57

    Lieber Uwe, es erstaunt mich doch ziemlich, dass mein VOLLSTÄNDIGER Name als Beispiel für dein System über yasni gefunden wird. Ob exotisch oder nicht, bitte entfernen.

  2. Uwe
    14. Januar 2010 um 14:45

    Wie nachvollziehbar ist handelt es sich lediglich um einen Zufall. Ich werde deinen Namen nicht entfernen, zumal er mir auch nicht bekannt ist. Das du deinen Namen hier finden konntest werte ich mal als Beweis für die Qualität des Adress-Generator. ;)

  3. xxx
    13. März 2010 um 11:55

    ich find den cool … der richtige weg … um der ständigen überwachung zu begegnen.

  4. Bethge
    21. Mai 2010 um 00:08

    Genau das hab ich gesucht! Super! Vielen Dank!

  5. Paul
    21. Mai 2010 um 12:46

    @Uwe, leider bin ich Programmier-Analphabet, wie kann man denn die generierten Adressen als csv ausgeben? Das wäre sehr praktisch;)

  6. Adressgenerator als CSV exportieren | derUwe.de
    21. Mai 2010 um 14:07

    […] gab einen Kommentar in meinem Beitrag zum Adressgenerator, welcher dynamisch Personen mit zufälliger Adresse generiert. Da wurde nach der Lösung gefragt […]

  7. Adressgenerator in PHP | Programmierung und Administration
    6. Juli 2010 um 13:26

    […] hier gibts den Adressgenerator bei deruwe.de inklusive einer kleinen […]

  8. Fake-Identitäten leicht gemacht » weigandtLabs
    30. August 2011 um 10:45

    […] sich so einen Generator lieber selber programmieren will, der findet hier bereits eine fertige PHP-Klasse und eine sehenswerte Datenbank an deutschen Namen, Straßen und PLZ/Ort. Damit hat man schon eine gute Basis, die man noch mit […]

  9. 2,4 Millionen Nicknames | derUwe.de
    26. Dezember 2011 um 23:51

    […] Ergänzung zu den Listen des Adressgenerator hier eine Sammlung von 2.401.375 eindeutigen Nicknames (Vorsicht, 26 MB Textdatei). Viel Spaß […]

  10. Felipe
    24. September 2012 um 06:29

    Hey,

    Ich bin zufällig uber die Seite hier gestossen ich suche eine Datei am besten csv mit allen Strassen namen von Deutschland mit orten oder PLZ für ein Kontaktformular um zu überprüfen ob die Adresse existieren kann hausnummern müssen nicht sein

  11. Merle Kraemer
    22. Dezember 2012 um 11:43

    Wie man sieht hatte ich die Idee auch schon mal:
    ——————————————————————
    Geschlecht : weiblich
    Vorname . . : Beverlee
    Name . . . . : Schaefer
    Ort . . . . : 66117 – Saarbrücken
    Geburtsjahr : 1980
    E-Mail . . . : Beverlee.Schaefer@Mailinator.com
    Passwort . . : Schatulle822
    Geburtsdatum : 26.01.1980
    ——————————————————————

    ——————————————————————
    Geschlecht : männlich
    Vorname . . : Leeland
    Name . . . . : Zimmermann
    Ort . . . . : 99330 – Liebenstein
    Geburtsjahr : 1983
    E-Mail . . . : Leeland.Zimmermann@Mailinator.com
    Passwort . . : Netzkonfiguration342
    Geburtsdatum : 19.10.1983
    ——————————————————————

    ——————————————————————
    Geschlecht : männlich
    Vorname . . : Charlton
    Name . . . . : Werner
    Ort . . . . : 44866 – Bochum
    Geburtsjahr : 1977
    E-Mail . . . : Charlton.Werner@Mailinator.com
    Passwort . . : mittwochs886
    Geburtsdatum : 07.12.1977
    ——————————————————————

    ——————————————————————
    Geschlecht : weiblich
    Vorname . . : Roselle
    Name . . . . : Albrecht
    Ort . . . . : 53121 – Bonn
    Geburtsjahr : 1988
    E-Mail . . . : Roselle.Albrecht@Mailinator.com
    Passwort . . : Brechstange663
    Geburtsdatum : 02.01.1988
    ——————————————————————

    ——————————————————————
    Geschlecht : weiblich
    Vorname . . : Shirleen
    Name . . . . : Voigt
    Ort . . . . : 18184 – Poppendorf
    Geburtsjahr : 1976
    E-Mail . . . : Shirleen.Voigt@Mailinator.com
    Passwort . . : Derivat305
    Geburtsdatum : 08.01.1976
    ——————————————————————

    ——————————————————————
    Geschlecht : weiblich
    Vorname . . : Nicki
    Name . . . . : Koch
    Ort . . . . : 55569 – Monzingen
    Geburtsjahr : 1973
    E-Mail . . . : Nicki.Koch@Mailinator.com
    Passwort . . : materialspezifisch419
    Geburtsdatum : 09.08.1973
    ——————————————————————

    ——————————————————————
    Geschlecht : weiblich
    Vorname . . : Jasmine
    Name . . . . : Fuchs
    Ort . . . . : 99441 – Großschwabhausen
    Geburtsjahr : 1980
    E-Mail . . . : Jasmine.Fuchs@Mailinator.com
    Passwort . . : Erzeugnis679
    Geburtsdatum : 20.08.1980
    ——————————————————————

    ——————————————————————
    Geschlecht : weiblich
    Vorname . . : Dahlia
    Name . . . . : Moeller
    Ort . . . . : 76889 – Steinfeld
    Geburtsjahr : 1978
    E-Mail . . . : Dahlia.Moeller@Mailinator.com
    Passwort . . : pneumatisch611
    Geburtsdatum : 15.06.1978
    ——————————————————————

  12. Jens M
    25. Januar 2013 um 11:36

    Yay, coole namensliste. Habe damit gerade ein paar millionen Testdatensätze generiert um ein paar SQL-Querys zu benchmarken. :)

    Zur Zerstreuung meines Namens z. B. auf yasni hilft es nicht. Mein Nachname ist nicht drin und meine Vorname+Nachname kombination ist meines Wissens einmalig. :(

    Jedenfalls großes Lob für die große Liste. :)

  13. Carsten
    9. Dezember 2013 um 10:45

    Super script! Grosses Kompliment!
    Ich habe noch zwei weitere Funktionen in die Klasse eingepflegt:
        function getCSVRec($geschlecht=0){
            $PLZOrt = $this->getPlzOrt();
            return
                $this->getVorname($geschlecht).';'.$this->getNachname().';'.
                $this->getStrasse().' '.$this->getHausnummer().';'.
                substr($PLZOrt,0,5).";".substr($PLZOrt,6).";\n";
        }

    getRecObj – erstellt ein Datensatzobjekt.

        function getRecObj($geschlecht=0){
            $PLZOrt = $this->getPlzOrt();
            $recObj = '{
                "first_name": "'.$this->getVorname($geschlecht).'",
                "last_name": "'.$this->getNachname().'",
                "zip_code": "'.substr($PLZOrt,0,5).'",
                "city": "'.substr($PLZOrt,6).'"}';
            return json_decode($recObj);
        }

    Tausend dank

  14. Titus
    17. Februar 2014 um 11:55

    Hallo Uwe
    Das ist ein Super Tool. Herzlichen Dank für die tolle Idee.
    Ich habe noch ein Problem mit den Sonderzeichen, Umlauten etc.

    z.B. schreibt das Programm “Günzburg”

    Weist Du wie dies noch beieinflussen kann?

    MfG
    Titus

  15. Uwe
    17. Februar 2014 um 17:38

    utf8_encode() bzw. utf8_decode() sind wahrscheinlich die Lösung. Evt. hilft auch schon eine Konvertierung im einem dazu fähigem Texteditor deiner Wahl.

Kommentar?

Hinweise zum Datenschutz siehe Impressum

*

tempo@deruwe.de jl@deruwe.de