ID Unique

Signaler
Messages postés
5
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
5 octobre 2007
-
Messages postés
5
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
5 octobre 2007
-
Bonjour,
j'ai un problème simple qui consiste à créer un ID unique en variable de session, j'utilise "uniqid" mais le chiffre généré est trop important (16), car j'utilise ce chiffre comme clé primaire pour identifiant de commande et ma banque me limite à 12 caractères... Si une bonne âme connait une solution pour que ce numéro reste unique mais en plus court... ça m'aiderait grandement,
Merci d'avance pour les courageux...

11 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

jette un oeil à microtime ()
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
Salut,

? plus courts que quoi ?

un id de session, c'est md5(microtime()) mais ça va faire trop de caractères... si tu prends un substr et que tu mémorises les autres id, alors pas de risques...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
5
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
5 octobre 2007

Merci pour ces réponses, mais je n'arrive pas à m'en dépatouiller avec microtime(), comment obtenir un chiffre avec une longueur constante de 12 caractères ? Pour répondre à coucou747, effectivement je suis ammené à mémoriser cet ID, mais j'aurais aimé économiser une requête vers la base (et le traitement d'erreur associé) pour valider que l'ID est bien unique...
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Si tu passes par une base, pourquoi tu ne crées pas un autoincrement qui commence à 10000...?
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
bah substr() pour couper les chaines...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
Salut,

FhX, ouais, mais là, la notion d'unicitée est perdue... déjà que coté md5 c'est pas ça....

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
5
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
5 octobre 2007

Merci à tous de votre intéret pour mon petit cas,
pour répondre à malalam, je ne veux pas utiliser l'autoincrement car je veux que ce nombre reste une variable temporaire jusqu'à la fin du processus et seulement là je transformerai cette variable en ID unique, ça m'éviteras de créer un enregistrement pour chaque visite...
Enfin pour la suggestion de FhX, j'y ai bien pensé, mais mon niveau en math laisse à désirer et j'ai effectivement des doutes sur l'unicité d'un chiffre basé sur date puis tronqué...
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Bah, t'as guère le choix. Faut stocker. Comment tu sauras que c'est unique avec des sessions, si tu n'enregistres pas au fur et à mesure ?
Je m'explique : A vient, fait son bin's, tu lui crées un id. B vient, fait son bin's, tu lui crées un id. Comment tu vas comparer A_id et B_id ? En plus, une fois insérés dans ta base, tu n'auras plus la possibilité de savoir si le nouvel id créé à jour + x est présent ou non dans ta base, à moins que ce ne soit un id autoincrement, donc unique, stocké en base.
uniqid était très bien pour ça, en effet. Au passage, chez moi c'est 13 caractères, pas 16. Mais bon, on s'en fout, ça fait trop de ttes façons.

Bref...à mon avis, tu devrais penser à ce qu'a dit FhX :
<?php
echo substr (uniqid (), 0, 12);
?>
si tu supprimes le dernier, il y a à priori peu de chance que tu tombes sur des doublons, à mons que les enregistrements soient vraipment très très rapprochés. ET encore, tu peux stocker ça dans un fichier que tu effaces tous les jours, pour être sûr.
Messages postés
5
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
5 octobre 2007

Bon... après plusieurs test, impossible de faire fonctionner uniqid sans paramètre : uniqid();
Par contre ça semble bien fonctionner comme ça : uniqid('',true);
Je voulais savoir si malalam avait testé la commande proposée, car chez moi, ça marche poa... problème de plateforme ? ou de version ? suis sur PC - Windows XP avec EasyPHP 1.8
En tout cas un grand merci à tous !!!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Suis en php5, qui ne néessite pas le paramètre 'préfixe' (le 1er, ta chaîne vide).
Si tu mets à true, tu as 23 caractères. Bref :
uniqid('', false)
te renverra 13.
Et le substr, 12.
Et oui, j'ai testé ;-)
Messages postés
5
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
5 octobre 2007

Merci pour le petit détail qui peut avoir son importance. Ceci dit je n'avait aucune arrière pensée sur le fait que tu l'avais testé... ça ressemblait beacoup à doc PHP. Encore merci !