Archiv:

Latest photoblog

photoblog

Blog » Zufällige Zeichenketten mit PHP generieren

Zufällige Zeichenketten mit PHP generieren

Da ich vor kurzem in dieses Gespräch verwickelt war und mich mit Perl leider in keinster Weise auskenne, habe ich eine eigene kleine PHP-Lösung erstellt. Wem sie gefällt der darf sie gerne frei benutzen, verändern, weitergeben, verkaufen, was auch immer ihr damit machen wollt (solange ich als Autor genannt werde):

<?php
/**
 * Generiert eine ID aus einem bestimmten Satz an Zeichen
 *
 * @author	Manuel Bieh, www.manuelbieh.de
 *
 * @param    string    Gewünschte Länge der erzeugten ID (optional, default: 11, maximal: 64)
 * @param    array     Array mit eigenen Zeichen (optional, default: a-zA-Z_)
 * @return   string    Gibt die erzeugte ID zurück
 */
function uniqueID($length=11, $chars='') {
 
	$length = empty($length) ? 11 : $length;
	$length = $length > 64 ? 64 : $length;
 
	if(!is_array($chars) || (is_array($chars) && empty($chars))) {
		for($i=65;$i<=90;$i++) {
			$chars[] = chr($i);
		}
		for($i=97;$i<=122;$i++) {
			$chars[] = chr($i);
		}
		$chars[] = '_';
	}
 
	$c = count($chars);
	for($i=0;$i<$length;$i++) {
		$uid .= $chars[rand(0, $c-1)];
	}
	return $uid;
}
 
echo uniqueID();
?>

Hier nochmal ohne komische Umbrüche und mit Syntaxhighlighting:
http://manuelbieh.de/www/blog/wp-content/uniqueid.phps

10 Kommentare zu “Zufällige Zeichenketten mit PHP generieren”

  1. Grafik: GravatarJeena Paradies:

    Ich hätte das ja auf einen dreizeler gekürzt:

    <?php
    function uniqueID($length=10, $chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") {
      $uid = "";
      for($i=0; $i< $length; $i++) $uid .= $chars[rand(0, strlen($chars))];
      return $uid;
    }>

    Ich würde auch nicht behaupten dass das unique ids werden sondern eher zufalls IDs.

  2. Grafik: GravatarJeena Paradies:

    http://phpfi.com/249711 Hier noch einmal weil die Kommentarfunktion hier irgendwie kaputt ist.

  3. Grafik: GravatarManuel:

    das ist richtig, ja ;)
    hatte den titel nur übernommen, und je nachdem wie man diese zufälligen IDs weiterverarbeitet können theoretisch auch unique IDs daraus werden ;)

  4. Grafik: GravatarManuel:

    ah jetzt seh ich deinen code. ja, so kann mans natürlich auch machen, nicht schlecht. danke ;)

  5. Grafik: GravatarJuniperus:

    Leider ist die ID in keinster Art und Weise Uniqe.

    Stellt euch mal vor ihr habt einen Cluster aus 20 Webservern. Bei jedem Pageview soll eine Uniqid erzeugt werden. Was glaub ihr denn (rand ist Zeitabhängig) wie oft es da zu einer Doppelung kommt?

  6. Grafik: GravatarManuel:

    wie schon gesagt, es kommt einfach darauf an was man daraus macht. wenn man den erzeugten string als unique key in ner db speichert dann isses eben doch unique ;)
    und wie willst du einen eindeutigen string erzeugen wenn du die alten nicht speicherst.

    du kannst ja keinen eindeutigen string erzeugen wenn du die rahmenbedingungen nicht kennst. und wie gesagt, der begriff „unique“ ist ein wenig misslich gewählt und wurde lediglich mehr oder weniger falsch übernommen.

  7. Grafik: GravatarDaniel:

    Was ist mit ID gemeint? Einfach ein einzigartiger String oder explizit eine Zahl?

    Ansonsten kannst du auch einfach eine Zahl per random() auswählen und darauf einen md5()-Hash legen.

    Oder noch einfacher. Unique geht nur in Abhängigkeit mit einer Datenbank. Also einfach die Tabelle sortieren und die höchste ID um +1 erhöhen. ;)

    Aber da hast du Recht Manuel, das Wort unique ist in der Tat etwas schwammig. :)

  8. Grafik: GravatarManuel:

    klar, aber sinn der sache war ja, kurze IDs wie bspw. bei youtube zu erzeugen, die aber aus mehr als nur a-z und 0-9, also 36 zeichen bestehen. in der variante gibts eben auch noch großbuchstaben, was die anzahl der möglichkeiten drastisch erhöht. statt 33.554.432 (32^5) möglichkeiten bei 5 Zeichen länge, gibts mit der methode oben 916.132.832 (62^5) möglichkeiten.

    von „klartext“ IDs wollt ich weg, was z.b. bei fortlaufenden nutzerprofilen ziemlich gefährlich sein kann, da sniffer es einfach haben sich mal eben alle profile durch ne einfache schleife zu speichern.

  9. Grafik: Gravatarelli:

    @manuel
    Sehr interessante Funktion.
    Wenn es für Dich nicht zu viel Mühe macht, wären Unique IDs nicht schlecht.

  10. Grafik: GravatarManuel:

    naja. wer einigermaßen auf nummer sicher gehen will der hängt noch n microtime() hinten dran:

    return $uid . microtime();

    die chance das jemand in genau der gleiche mikrosekunde genau die gleiche buchstaben/zahlenkombination erhält dürfte so verschwindend gering sein. obwohl es theoretisch natürlich immernoch möglich wäre.

Die Trackback-URL lautet