Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    View Cyril Durand's profile on LinkedIn

    hit counters

Créer un Guid en JavaScript

Dans certains cas on aimerait bien obtenir un numéro unique (un guid) coté client donc en JavaScript.

Malheureusement le type Guid n'est pas définit par Microsoft Ajax et encore moins par JavaScript. J'ai donc réécrit le type .net System.Guid en utilisant la syntaxe Microsoft Ajax Library. Vous pouvez retrouver cette implémentation sur JavaScriptFR : Implémentation du type Syste.Guid avec Microsoft Ajax 

Ce type possède les mêmes méthodes que le type System.Guid : voir la documentation de la msdn. La fonction la plus interéssante du type est bien évidemment la méthode newGuid() qui génére un nouveau Guid :

CS.Guid.newGuid = function(){ var d = new Date(); var end = d.getTime().toString(); for(var i = end.length; i < 32; i++){ end += Math.floor(Math.random()*16).toString(16); } return new CS.Guid(end); }

Comme vous vous en rendez compte, on peut facilement récupérer la date à laquelle le Guid a été généré et il n'est pas forcément unique si 2 PC exécutent en même temps la même fonction et obtiennent la même combinaison de Math.random() ce qui ne doit pas être très fréquent.

A cause de ces petits problèmes et surtout parce qu'il ne faut JAMAIS faire confiance au client je vous conseille d'utiliser ce type le moins souvent possible et de générer un vrai Guid à partir de .net lorsque c'est possible.

Si quelqu'un a une solution qui garanti encore plus l'unicité d'un Guid généré à partir de JavaScript et sans utiliser d'ActiveX je suis preneur.

Posted: mercredi 18 avril 2007 15:21 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Aurelien a dit :

D'après les souvenirs des quelques recherches que j'avais fait la dessus, il est impossible de garantir l'unicité d'une chaîne à longueur déterminer au travers du Math.random() JavaScript.

Si je retrouve mes benchs, il me semble que j'avais un duplicat a partir du 1.000.000 appel de ma fonction de génération ...

# avril 18, 2007 18:01

FREMYCOMPANY a dit :

Et avec la consommation d'un service web AJAX ?

# avril 18, 2007 21:17

cyril a dit :

Ouais mais là non, on va pas faire une requête Ajax pour un oui ou pour un non. Au pire on charge un js qui va ajouter 100 Guid et on gère un pool de guid. Mais question perf c'est pas ce qu'il y a de mieux quand meme ...

# avril 18, 2007 22:09

christian a dit :

Je ne sais pas si en JavaScript tu peux facilement avec accès à l'adresse MAC de la machine. C'est l'ancienne méthode de génération, Adresse MAC + Composante Date + Compteur.

# avril 19, 2007 10:11

smo a dit :

Je ne sais pas ce que tu entends par "sans utiliser d'activeX". Si on a le droit d'utiliser un ActiveX toujours présent dans la machine (pas d'installation), on peut faire

var tlb = new ActiveXObject("scriptlet.typelib");

var newGuid = tlb.GUID;

(ref: http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0221.mspx)

Evidemment, ça ne fonctionne pas sous FF, Safari et al. Pour cela, on est forcément limité à un "sous GUID". Le détail d'implémentation des trois versions de GUID se trouve ici: http://www.ietf.org/rfc/rfc4122.txt

# avril 23, 2007 00:02
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- un Pacman en Silverlight 2b2 par Pierrick's Blog le il y a 4 heures et 19 minutes

- Une table -> deux entity types sans colonne discriminante en base, gestion des relations par Matthieu MEZIL le il y a 12 heures et 17 minutes

- ssdl view et TPT par Matthieu MEZIL le 07-05-2008, 02:04

- L'injection SQL n'est PAS un problème QUE pour les développeurs web ! par CoqBlog le 07-05-2008, 01:08

- Un outil pour réaliser des animations WPF basées sur des équations de Bézier par Perspective le 07-04-2008, 21:45

- Sandcastle et CodePlex : le verdict par CoqBlog le 07-04-2008, 20:53

- ssdl view et TPH par Matthieu MEZIL le 07-04-2008, 19:12

- Webcasts sur le Parallel Framework disponibles par Matthieu MEZIL le 07-04-2008, 17:26

- [Silverlight] - Comprendre et Débuter avec Silverlight par Danuz le 07-04-2008, 12:41

- SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par Blog Technique de Romelard Fabrice le 07-04-2008, 01:00