Je souhaite générer une valeur alphanumérique unique et courte à utiliser comme codes de confirmation pour les achats en ligne. J'ai regardé dans https://github.com/broofa/node-uuid mais leurs uuids sont trop longs et je veux les avoir environ 8 caractères longs. Quelle est la meilleure façon de le faire?Les noeuds génèrent des caractères alphanumériques courts et uniques.
Répondre
23/10/15: Voir également la réponse aux hashids ci-dessous!
Vous pouvez emprunter à partir du modèle de raccourcisseur d'URL et faire quelque chose comme ceci:
(100000000000).toString(36);
// produces 19xtf1ts
(200000000000).toString(36);
// produces 2jvmu3nk
incrémenter juste le nombre de garder unique:
function(uniqueIndex) {
return uniqueIndex.toString(36);
}
Remarque que ce n'est vraiment utile pour les services à "instance unique" qui ne se préoccupent pas d'une certaine prévisibilité de la manière dont cela est ordonné (par incrément de base). Si vous avez besoin d'une valeur vraiment unique à travers un certain nombre d'instances d'applications/DB, vous devriez vraiment envisager une option plus complète pour certains des commentaires.
Merci pour le conseil. J'ai fini par utiliser quelque chose de similaire à ce que vous avez fourni: var now = new Date(); Math.floor (Math.random() * 10) + parseInt (now.getTime()). ToString (36) .toUpperCase() – teggy
Qu'est-ce que 'parseInt' ajoute? Est-ce que '(100000000000) .toString (36)' ne fonctionnerait pas aussi bien? – JohnnyHK
Oui, il le ferait. Je voulais juste clarifier ce qui se passait. –
Un peu en retard sur celui-ci mais il semble que les hashids fonctionneraient plutôt bien pour ce scénario.
https://github.com/ivanakimov/hashids.node.js
hashids (de Hash ID) crée court, hash unique, déchiffrable d'entiers non signés
var Hashids = require('hashids'),
hashids = new Hashids('this is my salt');
var hash = hashids.encrypt(12345);
// hash is now 'ryBo'
var numbers = hashids.decrypt('ryBo');
// numbers is now [ 12345 ]
Si vous souhaitez cibler ~ 8 caractères que vous pourriez faire, ce qui suit que appelle pour un minimum de 8 caractères.
hashids = new Hashids("this is my salt", 8);
alors ceci:
hash = hashids.encrypt(1);
// hash is now 'b9iLXiAa'
La réponse acceptée serait prévisible/devinables, cette solution doit être unique et imprévisible.
Mises à jour des hashids à partir de la version 1.0.0. Plusieurs fonctions publiques sont renommées pour être plus appropriées: ** Fonction encrypt() changée pour encoder() **, ** Fonction decrypt() changée en decode() **, ** Fonction encryptHex() changée en encodeHex() **, ** Fonction decryptHex() modifiée en decodeHex() ** –
Le lien est rompu. –
Voici le [nouveau lien] (https://github.com/ivanakimov/hashids.js). – cowgill
Installez le module shortId (https://www.npmjs.com/package/shortid). Par défaut, shortid génère 7-14 caractères conviviaux: A-Z, a-z, 0-9, _- mais vous pouvez remplacer - et _ par d'autres caractères si vous le souhaitez. Maintenant, vous devez coller ce shortId à vos objets lorsqu'ils sont enregistrés dans la base de données. La meilleure façon est de les coller dans le schéma comme celui-ci:
var shortId = require('shortid');
var PurchaseConfirmationSchema = mongoose.Schema({
/* _id will be added automatically by mongoose */
shortId: {type: String, unique: true, default: shortId.generate}, /* WE SHOULD ADD THIS */
name: {type: String},
address: {type: String}
});
je l'ai déjà répondu à la question similiar à moi-même ici:
Salut, est shortId va donner une chaîne unique même après le redémarrage du serveur? –
Mais il nécessite un dictionnaire d'exactement 64 caractères, donc il ne va pas être alphanumérique même si vous remplacez - et _. –
A cet effet, j'ai écrit un module qui peut fais cela et toujours plus. Regardez la page: id-shorter
IF chaque achat en ligne associé à l'URL unique, vous pouvez utiliser le back-end du paquet simple-short, qui ne nécessitent pas de connexion de base de données, ni les services Web:
var shorten=require('simple-short');
shorten.conf({length:8}); // Default is 4.
code1=shorten('http://store.com/purchase1');
code2=shorten('http://store.com/purchase2');
//.. so on
- 1. Générer des nombres alphanumériques uniques
- 2. ID uniques courts
- 3. Regex pour les caractères alphanumériques et spéciaux
- 4. Membership.generatepassword pour les caractères alphanumériques
- 5. Génération d'ID alphanumériques (chaînes uniques)
- 6. Comment vérifier les caractères alphanumériques
- 7. Meilleure méthode pour créer des ID uniques courts dans MySQL
- 8. Autoriser les caractères alphanumériques, la ponctuation et les espaces
- 9. Empêcher les caractères alphanumériques dans JTextField
- 10. PHP preg_match - permet uniquement les chaînes alphanumériques et - _ caractères
- 11. Caractères alphanumériques correspondants séparés par des espaces
- 12. Classes HTML et ID avec des caractères $ ou non alphanumériques
- 13. Supprimer tous les caractères sauf alphanumériques et espaces avec javascript
- 14. Comment désactiver les caractères alpha, alphanumériques et spéciaux dans UITextField?
- 15. supprimer les caractères non alphanumériques PHP sauf "_"
- 16. supprimer les caractères non alphanumériques, sauf espace
- 17. Comment trier les caractères alphanumériques dans Java?
- 18. Problème Regex avec la reconnaissance des caractères alphanumériques
- 19. Regex pour supprimer les caractères non alphanumériques des chaînes UTF8
- 20. Création d'ID d'objets courts et uniques dans MongoDB
- 21. Supprimer tous les caractères alphanumériques à l'exception des espaces?
- 22. PHP: échapper caractères non-alphanumériques
- 23. Unicode: suppression des caractères non alphanumériques des mots-clés
- 24. expressions régulières pour supprimer tous les caractères sauf les caractères alphanumériques et certains signes de ponctuation
- 25. Regex pour faire correspondre tous les caractères alphanumériques et certains caractères spéciaux?
- 26. regex pour autoriser seulement certains caractères spéciaux et incluant également les caractères alphanumériques
- 27. Noeuds xml uniques basés sur l'attribut
- 28. T-SQL trim & nbsp (et autres caractères non alphanumériques)
- 29. Htaccess, mod_rewrite et expression régulière pour les caractères alphanumériques et les tirets uniquement
- 30. Terme sans caractères alphanumériques avant ou après
unique et court ne vont pas de pair sauf si vous pouvez garantir qu'ils ont une origine unique, ou avoir une méthode d'imbrication pour que deux serveurs ne génèrent pas les mêmes chaînes. – Brad
Si vous utilisez une fonction de hachage, vous pouvez essayer de déterminer la sous-chaîne la plus courte possible du résultat du hachage, de la même manière que git est une abréviation des hachages de commit. – TheHippo