CRÉATION AUTOMATIQUE D'UN NUMÉRO D'IDENTIFIANT

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 11 nov. 2004 à 23:19
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021 - 20 nov. 2004 à 00:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/27506-creation-automatique-d-un-numero-d-identifiant

cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
20 nov. 2004 à 00:37
Le plus efficace pour se genre de coses est d'utiliser l'espace temps dateref-now=Valeur pour la base du calcul de l'id unique.

Exemple (imagé):

var MonTemps :TTime;
MonTemps:="Date d'install du windows dans la machine"-now
convertir MonTemps en millisecondes (date et heures a la milliseonde prés)
MaValderef=(montempsms*pi)+valeur calculée sur le n°de série du Disque dur.
MonIdUnique=md5 ou losing byte sur MvalDeRef

Et voila.

Bon Coding...

ManChesTer.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
12 nov. 2004 à 13:04
yes, on peut effectivement recup l'ip, le n° de version de windows, ou pleins d'autres chiffres contenu sur le pc, meme compter le nombre de caracteres contenu ds le nom du pc ou de l'utilisateur :)
apres on magouille un algo et HOP !
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
12 nov. 2004 à 12:59
Ouai, c' est vrai, mais tu peux utiliser l' IP du PC pour creer un nombre unique en y ajoutant un numero à la fin qui lui, sera incrementé !!!
Ça a le merite de ne pas foirer même si tu changes l' heure et la date du PC !!!
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
12 nov. 2004 à 12:47
le dernier ? et si j'ai deux applications qui utilisent la fonction en meme temps, chacune d'entre elle ne cree que UN seul ID. je n'ai pas de dernier dans ce cas ! :/
avec la fonction de base (de notre posteur) les 2 fonctions auraient créé le meme ID. ici ça change qd meme :)

ton idée est superbe si on a besoin dans la meme appli de creer plusieurs ID (comme dans mon exemple, mais qui n'est qu'un exemple)

il est vrai que je ne peut pas etre 100% sur ke je n'ai pas 2 ID identique en 1 seconde, mais j'y suis presque non ?

le pro de ce genre de source est ManChesTer :D MANCHESTERRRRR VIIIIEEENNNSS !!
lol
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
12 nov. 2004 à 12:38
C' et une bonne idée JulioDelphi.
Mais le mieux c' est de créer un numero unique se basant sur le dernier crée: là tu est sûr qu' il sera unique !!!
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
11 nov. 2004 à 23:19
hello,

tu parles d'identifiant unique. l'idée est bonne, le code est clair.
malheureusement, si je fais appel a ta fonction 1000 en une seconde, alors j'aurais 1000 fois le meme chiffre ... dommage pour un identifiant "unique"

voila ce ke je te propose :

function SetRecordKey: cardinal;
var Random1, Random2,fNbJ,fSec: integer; aYear,aMonth,aDays,aHour,aMin,aSec,aMSec,fAn: word;
DateRef: TDateTime;
begin
Randomize;
Random1 := rand(100000);
Randomize;
Random2 := rand(100000);
DecodeDate(Now,aYear,aMonth,aDays); // année, mois, jour
DecodeTime(Now,aHour,aMin,aSec,aMSec); // heure, minute, seconde, milliseconde
DateRef:= EncodeDate(aYear,01,01); // 1er janvier de l'année en cours
fNbJ:= trunc(Now - DateRef) mod 366; // quantième du jour
fAn:= aYear - 2000; // nb années depuis l'an 2000
fSec:= (trunc(aHour*3600 + aMin*60 + aSec)) mod 86400; // nb de secondes
fNbJ:= (fNbJ * 100) + fAn;
Result:= fNbJ * Random1 + Random2 + fSec;
end;

avec ça, tu as tres peu de chance d'avoir 2 identifiant identique a la seconde.

bonne prog
Rejoignez-nous