Me gustaría generar un valor alfanumérico único breve para usar como códigos de confirmación para compras en línea. He buscado en https://github.com/broofa/node-uuid pero sus uidos son demasiado largos y quiero que tengan alrededor de 8 caracteres. ¿Cuál es la mejor manera de lograr esto?Nodejs genera caracteres alfanuméricos únicos cortos
Respuesta
10/23/15: ¡Vea también la respuesta de los hashids abajo!
Usted puede pedir prestado a partir del modelo acortador de URL y hacer algo como esto:
(100000000000).toString(36);
// produces 19xtf1ts
(200000000000).toString(36);
// produces 2jvmu3nk
sólo se incrementa el número de mantenerlo único:
function(uniqueIndex) {
return uniqueIndex.toString(36);
}
Nota que esto sólo es realmente útil para servicios de "instancia única" a los que no les importa una cierta cantidad de previsibilidad en la forma en que esto se ordena (a través del incremento básico). Si necesita un valor realmente único en varias instancias de aplicación/base de datos, realmente debería considerar una opción más completa en función de algunos de los comentarios.
Gracias por el consejo. Terminé usando algo similar a lo que me proporcionó: var now = new Date(); Math.floor (Math.random() * 10) + parseInt (now.getTime()). ToString (36) .toUpperCase() – teggy
¿Qué agrega el 'parseInt'? ¿No funcionaría '(100000000000) .toString (36)' igual de bien? – JohnnyHK
Sí, lo haría. Solo quería dejar en claro lo que estaba sucediendo. –
Un poco tarde en esto, pero parece que los hashids funcionarían bastante bien para este escenario.
https://github.com/ivanakimov/hashids.node.js
hashids (Hash ID) crea, único, hashes descodificarse cortos de enteros sin signo
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 desea orientar ~ 8 caracteres que podía hacer, el siguiente al requiere un mínimo de 8 caracteres.
hashids = new Hashids("this is my salt", 8);
entonces esto:
hash = hashids.encrypt(1);
// hash is now 'b9iLXiAa'
la respuesta aceptada sería predecible/guessable, esta solución debe ser única e impredecible.
Actualizaciones en hashids desde 1.0.0. Varias funciones públicas se renombran para ser más apropiadas: ** Cifrado de función() cambiado a codificar() **, ** Descifrar la función() cambiado a decodificar() **, ** La función encryptHex() cambió a encodeHex() **, ** Función decryptHex() cambiado a decodeHex() ** –
El enlace está roto. –
Aquí está el [nuevo enlace] (https://github.com/ivanakimov/hashids.js). – cowgill
Instalar el módulo shortId (https://www.npmjs.com/package/shortid). De forma predeterminada, shortid genera de 7 a 14 caracteres compatibles con las URL: A-Z, a-z, 0-9, _- pero puede reemplazarlos -y _ con algunos otros caracteres si lo desea. Ahora necesita de alguna manera pegar este shortId a sus objetos cuando se guardan en la base de datos. La mejor manera es pegarlas en el esquema como éste:
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}
});
ya he respondido a la pregunta similar a mí mismo aquí:
Hola, ¿shortId dará una cadena única incluso después de reiniciar el servidor? –
Pero requiere un diccionario de exactamente 64 caracteres, por lo que no será alfanumérico aunque reemplace - y _. –
Para ello escribí un módulo que puede haz eso y cada vez más. mirada en su página: id-shorter
si cada compra en línea asociada a la URL único, puede utilizar el backend de simple-short paquete, que no requiere conexión a la base de datos, ni los servicios 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. Cómo comprobar los caracteres alfanuméricos
- 2. Google usando caracteres no alfanuméricos
- 3. Creación de identificadores de objetos cortos y únicos en MongoDB
- 4. Permitir solo caracteres alfanuméricos para un UITextField
- 5. caracteres cheque alfanuméricos en cadena en C#
- 6. Comprimir 21 caracteres alfanuméricos en 16 bytes
- 7. Caracteres no alfanuméricos en los nombres de interfaz COM/.NET
- 8. Regex para eliminar caracteres no alfanuméricos de cadenas UTF8
- 9. Cómo restringir TextView para permitir sólo caracteres alfanuméricos en Android
- 10. expresiones regulares carácter concordante alfa seguida de 4 caracteres alfanuméricos
- 11. T-SQL trim & nbsp (y otros caracteres no alfanuméricos)
- 12. ¿Cómo determinar si una cadena tiene caracteres no alfanuméricos?
- 13. ¿Manera elegante de contar caracteres alfanuméricos en una cadena?
- 14. ¿Cómo elimino caracteres no alfanuméricos (espacios incluidos) de una cadena?
- 15. desprendimiento caracteres no alfanuméricos, pero dejando espacios en Ruby
- 16. RegEx para Javascript para permitir solo caracteres alfanuméricos
- 17. Permitir solo caracteres alfanuméricos en el cuadro de texto
- 18. ¿Cómo crear una expresión regular para aceptar solo caracteres alfanuméricos?
- 19. Eliminación de caracteres no alfanuméricos de una cadena
- 20. .NET Expresión regular que verifican longitud y caracteres no alfanuméricos
- 21. Eliminar todos los caracteres no alfanuméricos mediante preg_replace
- 22. Powershell 2.0 genera nulos entre caracteres
- 23. ¿Cómo se calculan los prefijos únicos más cortos de un conjunto de cadenas?
- 24. Para recuperar los caracteres únicos de una cadena?
- 25. Raíles más cortos "time_ago_in_words"
- 26. El teclado de Visual Studio genera caracteres incorrectos
- 27. impresión valores cortos sin signo
- 28. condicionales más cortos en js
- 29. XOR de dos enteros cortos
- 30. Caracteres válidos para la parte del directorio de una URL (para enlaces cortos)
único y corto no vaya de la mano a menos que pueda garantizar que tienen un solo origen, o tienen algún método de enclavamiento para que dos servidores no generen las mismas cadenas. – Brad
Si usa una función hash, podría tratar de determinar la subcadena más corta posible del resultado hash, similar a la forma en que abreviar los hashes de commit. – TheHippo