2012-06-14 3 views
3

Possible en double:
PHP: How to generate a random, unique, alphanumeric string?PHP: génération de chaîne unique

Je suis en train de générer identifiant unique (chaîne alpha-numérique). J'utilise l'horodatage curent pour cela. J'ai deux questions:

  1. Will md5(stamp1) être différent de md5(stamp2) si stamp1 != stamp2.
  2. Existe-t-il un moyen courant de générer une chaîne unique?

PS: Le plus simple est de prendre le cachet comme id. Pourtant, je ne veux pas qu'il était facile de savoir comment ID est généré

+2

Êtes-vous à la recherche de ['uniqid()'] (http://php.net/uniqid)? –

+0

Aussi possible duplicata de la section connexe et re votre première partie de la question: avez-vous essayé? Pour le troisième problème, une autre solution consiste à fournir un préfixe à 'uniqid()', par exemple: – Gordon

+0

http://stackoverflow.com/questions/219475/generating-unique-codes-in-php-mysql?rq=1 – Rinzler

Répondre

9
  1. Oui, dans la plupart des cas, ils seront différents. Les chances de collisions de hachage sont très, très faibles (pensez-en un en milliards). La fonction intégrée uniqid() est idéale pour cela. Vous pouvez même faire md5(uniqid()), mais sachez, cela n'augmentera pas l'entropie du GUID. Pour l'entropie accrue, vous pouvez appeler la fonction comme ceci: uniqid('',TRUE);

2

Je suis entièrement d'accord avec la réponse de xbonez mais je voudrais ajouter que selon ce que vous utilisez pour il y a quelques autres considérations.

  • Si cela est un identifiant de base de données, vous pouvez normalement compter sur l'incrément automatique ou d'autres fonctions clés uniques du système de base de données pour générer l'identifiant
  • si cela est pour les noms de fichiers utilisent tempnam à la place
  • vous
  • pourrait vouloir utiliser à la fois l'horodatage et un nombre aléatoire dans le md5 car il est très concevable que plusieurs utilisateurs pourraient frapper la page sur le même horodatage
+1

, peut-être, l'ID de l'utilisateur, ou une partie de son adresse IP. – xbonez

+0

En fait, si 'rand()' est initialisé par horodatage, deux utilisateurs qui visitent au même horodatage recevront le même nombre aléatoire. – xbonez

3

l'utilisation de hachage fonctions ne sera jamais vraiment unique, mais vous pouvez mettre ensemble une autre chaîne qui est beaucoup plus, à savoir prendre leur adresse IP et annexant la microtime demande, comme ceci:

$strUnique = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR'])) . floor(microtime(true) * 1000); 

Pour cela ne pas être unique, deux visiteurs devraient charger la page de la même adresse IP à la microseconde exacte, qui est plus improbable que deux hachages étant égaux.

Questions connexes