Eindeutige 5stellige ID erzeugen

DaSuckOOr

Mitglied
Hi,

ich habe eine kleine php anwendung mit mysql datenbank. jetzt habe ich die Anforderung, dass ich eindeutige id's generien muss, die folgenden Anforderungen entsprechen

- id sollte ca. 5 stellen haben numerisch oder alphanumerisch
- id muss eindeutig sein, nach 1 monat wird die id wieder freigegeben
- es muss sich um eine random id handeln nicht 1 dann 2 dann 3 usw.#

hat jemand eine idee wie ich das am besten mit php und mysql löse?

danke!
 
Hi DaSuck00r,

PHP stellt da eine Funktion von Haus aus zur Verfügung "Uniqid()"

PHP:
<?php


$code = substr(uniqid(), 0, 5);

echo $code;

?>

Da die uniqid allerdings mehr als 5-stellig ist, schneidest du sie dir einfach auf 5 Zeichen zurecht ;-) Enthält Buchstaben und Zeichen - sowie von dir gewünscht.

Gruß
Chans
 
ok super danke! Die Chance, dass innerhalb eines Monats die selbe 5-stellige ID erzeugt wird ist sehr gering und muss nicht behandelt werden oder? :)
 
So ganz ohne Check würde ich das nicht angehen. [phpf]uniqid[/phpf] ist in seiner vollen Länge (fast) eindeutig, aber sicher nicht nur die ersten 5 Stellen.
Die können freilich mehrmals gleich belegt werden.

Wie viele IDs musst du denn erzeugen? Bei 5 Stellen hast du 10^5 = 100.000 Möglichkeiten.


So ganz zufällig wird das nie funktionieren. Dazu musst du immer eine Prüfung auf Eindeutigkeit einbauen. Denn rein zufällig, können Ergebnisse immer n-fach auftreten.
Du musst es also von irgendeiner Größe abhängig machen.
[phpf]uniqid[/phpf] benutzt die Zeit (Mikrosekunden laut PHP Manual) als Faktor. Und die Länge verhindert natürlich auch Duplikate auf sehr lange Zeit.
 
Wenns auch nur Zahlen sein können, könntest du auch die letzten 5-6 Ziffern des Unix Timestamps verwenden... die kommen bestimmt nicht doppelt vor. (wobei du trotzdem gegenprüfen musst, falls zwei in der gleichen Sekunde generiert werden)
 
Hi,

ich würde die ID wie oben beschrieben generieren und anschließend in eine Datenbank eintragen, wobei das Feld mit der ID unique ist. Schlägt das Eintragen fehl, wird eine neue ID erzeugt und wieder versucht einzufügen. Das ganze natürlich auf eine vernünftige Anzahl von Versuchen begrenzen und fertig.

Grüße,
BK
 
PHP:
<?php
	$counter = 0;
	echo base_convert(time() + $counter++, 10, 36);
?>

Wobei $counter geteilt werden muss (z.B. über die Datenbank), um Eindeutigkeit zu garantieren.

Willst du genau 5 Stellen, schneide vorne eine Zeichen weg (NICHT HINTEN. der hintere Teil ist der wichtigere).
 
PHP:
<?php

class uniqID
{
	
	private function cryptSHA512($hash,$rounds)
	{
		$tmpHash = $hash;
		for($i = 0; $i <= $rounds; $i++)
		{
			$tmpHash = hash('sha512',$tmpHash);
		}
		return $tmpHash;
	}
	
	public function makeUniqID($rounds)
	{
 		$tmp1 = mt_rand(1,1000000000);
 		$tmp2 = mt_rand(1,1000000000);
 		$tmp1 = $this->cryptSHA512($tmp1,$rounds);
 		$tmp2 = $this->cryptSHA512($tmp2,$rounds);
 	
 		$tmp  = $tmp1 ^ $tmp2;
 		$tmp  = $this->cryptSHA512($tmp,$rounds); 
 		$tmp  = substr($tmp, 0, 5);
 		return $tmp;
 	}
}

$uniq = new uniqID();
echo $uniq->makeUniqID(10);
?>

Bei dieser Implementierung habe ich festgestellt das bei selbst wenn ich 5 mal hintereinadner 10.000 ID´s erzeugt habe kein Doppelt vorkam. Ein Möglichkeit die Zufälligkeit zu erhöhen ist eine weitere Multiplikation mit der lokalen Zeit.
 
Hallo zusammen,

Was ich Persönliche benutze um eindeutige Benutzer IDs zu erzeugen ist folgender Code.
Bringt vielerlei vorteile ;)

Code:
<?php

function uuid($prefix = '') {
    $chars = md5(uniqid(mt_rand(), true));
    $uuid  = substr($chars,0,8) . '-';
    $uuid .= substr($chars,8,4) . '-';
    $uuid .= substr($chars,12,4) . '-';
    $uuid .= substr($chars,16,4) . '-';
    $uuid .= substr($chars,20,12);
    return $prefix . $uuid;
}

echo "<b>Benutzer ID:</b> " .uuid(). " !";
?>
 

Neue Beiträge

Zurück