Je veux créer une chaîne aléatoire (jeton) qui peut être utilisée pour identifier un utilisateur tout en évitant tout conflit potentiel avec les jetons des autres utilisateurs.
Ce à quoi je pensais, c'était un hachage MD5 de navigator.userAgent + new Date().getTime()
pour générer le jeton, mais cela nécessite une bibliothèque MD5 Javascript complète pour le hacher, ce que je ne veux pas vraiment faire.
Il doit être composé de A-Z/0-9 caractères et idéalement pas plus de 32 caractères. Je suis ouvert à toutes les idées. Merci!
Juste pour clarifier, je ne recherche aucun générateur de chaîne aléatoire, la chaîne aléatoire doit être générée à partir des détails des utilisateurs disponibles via Javascript et peut également utiliser du temps pour éviter les conflits potentiels!
Paiement crypto.js projet. C'est une collection d'algorithmes cryptographiques. Le projet a des fichiers js distincts pour chaque algorithme de hachage.
Vous pouvez générer un nombre aléatoire et le convertir en base 36 (0-9a-z
):
var Rand = function() {
return Math.random().toString(36).substr(2); // remove `0.`
};
var token = function() {
return Rand() + Rand(); // to make it longer
};
token(); // "bnh5yzdirjinqaorq0ox1tf383nb3xr"
Cette fonction vous permet de définir la longueur du jeton et les caractères autorisés.
function generate_token(length){
//edit the token allowed characters
var a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".split("");
var b = [];
for (var i=0; i<length; i++) {
var j = (Math.random() * (a.length-1)).toFixed(0);
b[i] = a[j];
}
return b.join("");
}
Appelez simplement generate_token
generate_token(32); //returns "qweQj4giRJSdMNzB8g1XIa6t3YtRIHPH"
J'utilise une approche similaire à celle de Kareem , mais avec moins d'appels de fonction et d'opérations de tableau intégrées pour une grande amélioration des performances.
Selon un test de performance , cette méthode surpasse également la réponse acceptée par une petite marge. De plus, il fournit un paramètre n
pour générer n'importe quelle taille de jeton de taille à partir d'une liste blanche de caractères acceptables. Il est flexible et fonctionne bien.
function generateToken(n) {
var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var token = '';
for(var i = 0; i < n; i++) {
token += chars[Math.floor(Math.random() * chars.length)];
}
return token;
}
C'est très peu probable, mais Math.random () pourrait retourner 0.0
. Dans ce cas, la solution de pimvdb retournerait ""
(chaîne vide). Donc, voici une autre solution, qui retourne dans tous les cas une base36 aléatoire avec une longueur de 10 caractères:
function generateToken() {
Math.floor(1000000000000000 + Math.random() * 9000000000000000)
.toString(36).substr(0, 10)
}
//length: defines the length of characters to express in the string
const Rand=()=>Math.random(0).toString(36).substr(2);
const token=(length)=>(Rand()+Rand()+Rand()+Rand()).substr(0,length);
console.log(token(40));
//example1: token(10) => result: tsywlmdqu6
//example2: token(40) => result: m4vni14mtln2547gy54ksclhcv0dj6tp9fhs1k10