Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP uniqid: Eindeutige IDs erzeugen und richtig einsetzen

Sie befinden sich: Home > Php Tutorial > PHP uniqid: Eindeutige IDs ...

PHP uniqid: Eindeutige IDs erzeugen und richtig einsetzen


Eintrag am:  11.05.2026
Hits / Besucher:  11
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Ob für temporäre Dateinamen, Session-Bezeichner oder Datenbank-Einträge: Eindeutige IDs werden in PHP ständig gebraucht. Die Funktion uniqid() generiert solche Bezeichner auf Basis der aktuellen Systemzeit in Mikrosekunden. Das klingt erst einmal praktisch, doch die Funktion hat ihre Grenzen. Dieses Tutorial zeigt, wie uniqid() funktioniert, wann sie ausreicht und welche sicheren Alternativen es gibt.

Illustration zum Tutorial: PHP uniqid: Eindeutige IDs erzeugen und richtig einsetzen

Zunächst wird erklärt, wie uniqid() intern arbeitet und welches Format die erzeugten IDs haben.

Was macht uniqid()?

Die Funktion uniqid() erzeugt einen eindeutigen String auf Grundlage der aktuellen Systemzeit in Mikrosekunden. Der Rückgabewert ist ein hexadezimaler String mit 13 Zeichen. Da die Zeitbasis ständig fortschreitet, liefert jeder Aufruf in der Regel einen anderen Wert.

<?php

$id = uniqid();
echo $id; /* z.B. "65f1a3b4c8e72" */
echo strlen($id); /* 13 */

Intern greift die Funktion auf den aktuellen Unix Timestamp samt Mikrosekunden zu und wandelt diesen in eine hexadezimale Darstellung um.

Syntax und Parameter

Die vollständige Signatur der Funktion lautet uniqid(string $prefix = "", bool $more_entropy = false): string. Beide Parameter sind optional und beeinflussen das Format der erzeugten ID.

Prefix

Der erste Parameter stellt einen beliebigen String vor die generierte ID. Das ist nützlich, um IDs verschiedener Kontexte voneinander zu unterscheiden, etwa Benutzer-IDs von Bestell-IDs.

<?php

$benutzer_id = uniqid('user_');
echo $benutzer_id; /* z.B. "user_65f1a3b4c8e72" */

$bestell_id = uniqid('order_');
echo $bestell_id; /* z.B. "order_65f1a3b4c9a15" */

Der Prefix wird dem hexadezimalen Teil einfach vorangestellt, ohne Trennzeichen. Die Gesamtlänge ergibt sich aus der Länge des Prefix plus 13 Zeichen.

more_entropy

Wird der zweite Parameter auf true gesetzt, hängt PHP zusätzliche pseudozufällige Zeichen an. Der Rückgabewert wächst dadurch von 13 auf 23 Zeichen. Das verringert die Wahrscheinlichkeit von Kollisionen erheblich.

<?php

$kurz = uniqid();
echo $kurz; /* 13 Zeichen, z.B. "65f1a3b4c8e72" */
echo strlen($kurz); /* 13 */

$lang = uniqid('', true);
echo $lang; /* 23 Zeichen, z.B. "65f1a3b4c8e723.47283915" */
echo strlen($lang); /* 23 */

Wie eindeutig ist uniqid()?

Die Eindeutigkeit von uniqid() basiert ausschließlich auf der Systemzeit. Zwei Aufrufe innerhalb derselben Mikrosekunde können identische Werte liefern. Auf schnellen Systemen oder bei parallelen Prozessen ist das durchaus möglich.

flowchart TD
    A["uniqid() aufgerufen"] --> B["Systemzeit in Mikrosekunden lesen"]
    B --> C{"more_entropy = true?"}
    C -- Nein --> D["13 Zeichen hexadezimal"]
    C -- Ja --> E["23 Zeichen mit Zufallsanteil"]
    D --> F{"Gleiche Mikrosekunde wie anderer Aufruf?"}
    F -- Ja --> G["Kollision moeglich"]
    F -- Nein --> H["Eindeutige ID"]
    E --> H

Wichtig ist: uniqid() garantiert keine absolute Eindeutigkeit. Für unkritische Anwendungen wie temporäre Dateinamen reicht sie aus. Für sicherheitskritische Zwecke oder verteilte Systeme ist sie nicht geeignet.

IDs mit Prefix und Entropie

In der Praxis empfiehlt es sich, beide Parameter zu kombinieren. Der Prefix gibt der ID einen fachlichen Kontext, während more_entropy das Kollisionsrisiko minimiert.

<?php

$session_id = uniqid('sess_', true);
echo $session_id; /* z.B. "sess_65f1a3b4c8e723.47283915" */

$datei_name = uniqid('tmp_', true) . '.csv';
echo $datei_name; /* z.B. "tmp_65f1a3b4c9b823.18294756.csv" */

Diese Kombination eignet sich gut für Logging, temporäre Dateien oder interne Referenznummern.

Sichere Alternativen

Sobald Sicherheit eine Rolle spielt, sollte uniqid() nicht verwendet werden. Die Funktion ist nicht kryptographisch sicher, da ihre Ausgabe auf vorhersehbaren Zeitwerten basiert. PHP bietet bessere Werkzeuge.

random_bytes() und bin2hex() für kryptographisch sichere IDs

Die Funktion random_bytes() erzeugt kryptographisch sichere Zufallsdaten. In Kombination mit bin2hex() entsteht ein hexadezimaler String, der sich hervorragend als Token oder sichere ID eignet.

<?php

$token = bin2hex(random_bytes(16));
echo $token; /* z.B. "a3f8c91e4b7d20f156e8a0c3d9b47e2f" */
echo strlen($token); /* 32 */

Dieser Ansatz ist für Passwort-Reset-Tokens, API-Schlüssel und ähnliche sicherheitskritische Anwendungen die richtige Wahl.

UUIDs (v4) mit random_int()

UUID v4 ist der Standard für weltweit eindeutige Bezeichner. Eine einfache Implementierung lässt sich mit random_int() umsetzen, ohne externe Bibliotheken.

<?php

function uuid_v4(): string {
$daten = random_bytes(16);
$daten[6] = chr(ord($daten[6]) & 0x0f | 0x40);
$daten[8] = chr(ord($daten[8]) & 0x3f | 0x80);
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($daten), 4));
}

echo uuid_v4(); /* z.B. "f47ac10b-58cc-4372-a567-0e02b2c3d479" */

UUIDs eignen sich besonders für verteilte Systeme, in denen mehrere Server unabhängig voneinander IDs erzeugen müssen.

Datenbank-Auto-Increment

Für fortlaufende, numerische IDs innerhalb einer Datenbank ist Auto-Increment die einfachste und zuverlässigste Lösung. Die Datenbank selbst garantiert die Eindeutigkeit, ohne dass PHP eingreifen muss. Dieser Ansatz funktioniert jedoch nur innerhalb einer einzelnen Datenbanktabelle.

Wann uniqid() ausreicht und wann nicht

uniqid() ist völlig ausreichend für temporäre Dateinamen, Log-Einträge, Cache-Schlüssel oder interne Referenzen, bei denen keine Sicherheitsanforderungen bestehen. Mit aktiviertem more_entropy sinkt das Kollisionsrisiko auf ein Minimum, das für die meisten Alltagsfälle akzeptabel ist. Nicht geeignet ist uniqid() hingegen für Authentifizierungs-Tokens, Session-IDs in sicherheitskritischen Kontexten, API-Schlüssel oder öffentlich sichtbare Bezeichner, die nicht erratbar sein dürfen. In diesen Fällen sollte immer random_bytes() oder eine UUID-Implementierung zum Einsatz kommen.

Fazit

uniqid() ist ein schnelles und unkompliziertes Werkzeug für einfache, zeitbasierte IDs in PHP. Mit dem Prefix-Parameter lassen sich IDs fachlich einordnen, und more_entropy erhöht die Eindeutigkeit auf 23 Zeichen. Für alles, was über temporäre Bezeichner hinausgeht, sind random_bytes() mit bin2hex() oder UUID v4 die bessere Wahl. Sie bieten kryptographische Sicherheit und echte Zufälligkeit, die uniqid() nicht liefern kann.

 


Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.