9
votes

Uniqid () dans JavaScript / JQuery?


2 commentaires

Je ne vais pas fermer cela comme un duplicata, car le UNIQID ne semble pas créer de GUID (bien que ce soit ce que vous attendez de cela), mais peut-être que vous pouvez toujours trouver de l'aide ici: Stackoverflow.com/ Questions / 105034 / ...


Avez-vous besoin que cela soit aléatoire ou pouvez-vous simplement utiliser un compteur séquentiel? C'est-à-dire 'A1', 'A2', etc ...


8 Réponses :


2
votes

La vraie question est, avez-vous besoin de l'UUID pour être conforme à la RFC 4122? Votre question semble suggérer que vous ne le faites pas, il ne serait donc pas trop difficile de créer une fonction basée simplement sur Math.Random () pour générer des identifiants comme ça. De plus, il sera beaucoup plus rapide que la mise en œuvre PHPJS.


2 commentaires

Mais quelle est la conformité RFC 4122?


@Dylanncordel: point équitable, mais aucune des autres stratégies suggérées ici. La méthode PHP UNIQID () est essentiellement équivalente à Microtime () et tout générateur UUID purement algorithmique qui fonctionne dans un navigateur ou sur un (charge équilibré, multi-instance). Web Server va avoir le potentiel de collision - sauf si les noms de noms par serveur (clairement pas l'intention de l'administrateur) ou vérifiées contre un service GUID centralisé. Son schéma alphanumérique de 1 lettre + 10 donne un espace de 95 Quintillion ou environ 56bits d'entropie. Je ne m'inquiéterais pas trop sur les collisions.



10
votes

Essayez ceci (travail en PHP).

var n = Math.floor(Math.random() * 11);
var k = Math.floor(Math.random() * 1000000);
var m = String.fromCharCode(n) + k;


3 commentaires

La question est de demander une fonction javascript.


Ce code Java-Script n'a pas de précision (pas sûr d'être toujours alphabétique). Mais vous pouvez effectuer des modifications de code en fonction de vos besoins.


Ce n'est donc pas unique d'équivalent de la fonction PHP UNIQID



2
votes
<html>
<head>
<script type="text/javascript">
function generateSerial(len) {
    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    var string_length = 10;
    var randomstring = '';

    for (var x=0;x<string_length;x++) {

        var letterOrNumber = Math.floor(Math.random() * 2);
        if (letterOrNumber == 0) {
            var newNum = Math.floor(Math.random() * 9);
            randomstring += newNum;
        } else {
            var rnum = Math.floor(Math.random() * chars.length);
            randomstring += chars.substring(rnum,rnum+1);
        }

    }
    alert(randomstring);
}
generateSerial(8);
</script>
</head>
<body>

</body>
</html>
It's a bit convoluted, but you get the gist I'm sure!
Example: http://jsfiddle.net/Ng4tB/

0 commentaires

5
votes

Toutes les réponses ici (sauf phpJS) ne génèrent pas d'identifiants uniques car il est basé sur le hasard. Aléatoire n'est pas unique!

une solution simple: xxx

Il est facile d'ajouter un préfixe dynamique s'il est nécessaire. Il suffit de changer unique_id_counter dans un tableau stockant des compteurs pour chaque préfixe.


0 commentaires

20
votes

J'utilise cela ...

Je l'utilise exactement comme je le ferais si si PHP. Les deux renvoient le même résultat. P>

function uniqid(prefix = "", random = false) {
    const sec = Date.now() * 1000 + Math.random() * 1000;
    const id = sec.toString(16).replace(/\./g, "").padEnd(14, "0");
    return `${prefix}${id}${random ? `.${Math.trunc(Math.random() * 100000000)}`:""}`;
};


3 commentaires

Solution parfaite, exactement comme OP demanda. Cela devrait être la réponse acceptée.


Quels sont les arguments A et B?


Argument A est un préfixe et un argument B ajoutera un nombre aléatoire à la fin pour aider à éviter la collision.



1
votes
function uniqId(prefix) {
    if (window.performance) {
        var s = performance.timing.navigationStart;
        var n = performance.now();
        var base = Math.floor((s + Math.floor(n))/1000);
    } else {
        var n = new Date().getTime();
        var base = Math.floor(n/1000);
    }   
    var ext = Math.floor(n%1000*1000);
    var now = ("00000000"+base.toString(16)).slice(-8)+("000000"+ext.toString(16)).slice(-5);
    if (now <= window.my_las_uid) {
        now = (parseInt(window.my_las_uid?window.my_las_uid:now, 16)+1).toString(16);
    }
    window.my_las_uid = now;
    return (prefix?prefix:'')+now;
}
it is generated on "the same" priciple as PHP's uniqId() - specifically encoded time in microseconds.

1 commentaires

Merci! J'ai écrit un test pour comparer votre fonction JavaScript avec la sortie de PHP UNIQID (). J'ai trouvé que votre réponse sera plus précise.



1
votes

Underscore.js a un uniqueID () code> méthode
https://underscorejs.org/#uniqueid

_. uniqueID ([préfixe]) code>
Générez un identifiant unique à l'échelle mondiale pour les modèles côté client ou des éléments DOM en en a besoin. Si le préfixe est passé, l'ID sera annexé. P>

_.uniqueId('contact_');  
=> 'contact_104'


0 commentaires

0
votes

trouvé ceci:

HTTPS: / /github.com/maçable/uuid-v4.js/blob/master/uuuid-v4.js p>

et légèrement modifié à ceci: p>

function uniqid(length){
  var dec2hex = [];
  for (var i=0; i<=15; i++) {
    dec2hex[i] = i.toString(16);
  }

  var uuid = '';
  for (var i=1; i<=36; i++) {
    if (i===9 || i===14 || i===19 || i===24) {
      uuid += '-';
    } else if (i===15) {
      uuid += 4;
    } else if (i===20) {
      uuid += dec2hex[(Math.random()*4|0 + 8)];
    } else {
      uuid += dec2hex[(Math.random()*16|0)];
    }
  }

  if(length) uuid = uuid.substring(0,length);
  return uuid;
}


0 commentaires