Hashids es una pequeña biblioteca JavaScript para generar ID similares a YouTube a partir de números. Úselo cuando no desee exponer sus ID de base de datos al usuario: http://hashids.org/javascript
Instalar hashids a través de:
yarn add hashids (o simplemente use directamente el código en dist/hashids.js )
import Hashids from 'hashids'
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 ) ) const Hashids = require ( 'hashids/cjs' )
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 ) ) Nota: Cuando se use el nodo que admite las exportaciones condicionales, require('hashids') (versión> = 13) también funcionará.
< script type =" text/javascript " src =" hashids.min.js " > </ script >
< script type =" text/javascript " >
var hashids = new Hashids ( ) ;
console . log ( hashids . encode ( 1 ) ) ;
</ script > import o require , según el entorno (ver arriba). Si desea utilizar la sintaxis del módulo CommonJS ( require ), necesitará instalar los tipos node.js desde el repositorio DefinitelyTyped .
npm install @types/node
Si desea utilizar la sintaxis ESM ( import Hashids from 'hashids' ), deberá incluir las siguientes opciones en su tsconfig.json .
{
"allowSyntheticDefaultImports" : true ,
"esModuleInterop" : true
} No se requiere lo anterior si importa la versión CommonJS directamente: import Hashids from 'hashids/cjs' .
Si obtiene errores que indican: Cannot find name 'BigInt' , agregue "esnext.bigint" o "esnext" a su archivo tsconfig.json , en "lib" :
{
"compilerOptions" : {
...
"lib" : [
" esnext.bigint " ,
...
]
}
} Tenga en cuenta que su entorno en realidad no tiene que admitir BigInt para que funcionen los hashids.
const hashids = new Hashids ( )
const id = hashids . encode ( 1 , 2 , 3 ) // o2fXhV
const numbers = hashids . decode ( id ) // [1, 2, 3] Algunas formas más de pasar a encode() :
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // o2fXhV
console . log ( hashids . encode ( [ 1 , 2 , 3 ] ) ) // o2fXhV
// strings containing integers are coerced to numbers:
console . log ( hashids . encode ( '1' , '2' , '3' ) ) // o2fXhV
console . log ( hashids . encode ( [ '1' , '2' , '3' ] ) ) // o2fXhV
// BigInt support:
console . log ( hashids . encode ( [ 1n , 2n , 3n ] ) ) // o2fXhV
// Hex notation BigInt:
console . log ( hashids . encode ( [ 0x1n , 0x2n , 0x3n ] ) ) // o2fXhVHaga que sus identificadores sean únicos:
Pase una "sal" para que sus IDS sean únicos (por ejemplo, un nombre de proyecto):
var hashids = new Hashids ( 'My Project' )
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // Z4UrtW
var hashids = new Hashids ( 'My Other Project' )
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // gPUasbUse el relleno para que sus identificaciones sean más largas:
Tenga en cuenta que las ID solo están acolchadas para que se ajusten al menos una cierta longitud. No significa que sus ID serán exactamente esa longitud.
const hashids = new Hashids ( ) // no padding
console . log ( hashids . encode ( 1 ) ) // jR
const hashids = new Hashids ( '' , 10 ) // pad to length 10
console . log ( hashids . encode ( 1 ) ) // VolejRejNmPase un alfabeto personalizado:
const hashids = new Hashids ( '' , 0 , 'abcdefghijklmnopqrstuvwxyz' ) // all lowercase
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // mdfphx El alfabeto predeterminado es abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .
Desde v2.0 incluso puedes usar emojis como alfabeto.
Codificar hex en lugar de números:
Útil si desea codificar números como los objetos de Mongo.
Tenga en cuenta que no hay límite en qué tan grande puede pasar un número hexadecimal.
var hashids = new Hashids ( )
var id = hashids . encodeHex ( '507f1f77bcf86cd799439011' ) // y42LW46J9luq3Xq9XMly
var hex = hashids . decodeHex ( id ) // 507f1f77bcf86cd799439011Tenga en cuenta que este no es el equivalente de:
const hashids = new Hashids ( )
const id = Hashids . encode ( BigInt ( '0x507f1f77bcf86cd799439011' ) ) // y8qpJL3ZgzJ8lWk4GEV
const hex = Hashids . decode ( id ) [ 0 ] . toString ( 16 ) // 507f1f77bcf86cd799439011 La diferencia entre los dos es que el encodeHex incorporado siempre dará como resultado la misma longitud, incluso si contenía ceros principales.
Por ejemplo hashids.encodeHex('00000000') codificaría a qExOgK7 y se decodificaría a '00000000' (se conserva la información de longitud).
Al decodificar, la salida siempre es una matriz de números (incluso si codifica solo un número):
const hashids = new Hashids ( )
const id = hashids . encode ( 1 )
console . log ( hashids . decode ( id ) ) // [1]La codificación de números negativos no es compatible.
Si pasa la entrada falsa para encode() , se devolverá una cadena vacía:
const hashids = new Hashids ( )
const id = hashids . encode ( '123a' )
console . log ( id === '' ) // trueNo use esta biblioteca como herramienta de seguridad y no codifique datos confidenciales. Esta no es una biblioteca de cifrado.
El propósito principal de los hashids es ofuscar IDS. No se entiende o se prueba para ser utilizado como una herramienta de seguridad o compresión. Dicho esto, este algoritmo intenta hacer que estas identificaciones sean aleatorias e impredecibles:
No hay patrones de repetición que muestren que hay 3 números idénticos en la ID:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 5 , 5 , 5 ) ) // A6t1tQLo mismo con los números incrementados:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ) // wpfLh9iwsqt0uyCEFjHM
console . log ( hashids . encode ( 1 ) ) // jR
console . log ( hashids . encode ( 2 ) ) // k5
console . log ( hashids . encode ( 3 ) ) // l5
console . log ( hashids . encode ( 4 ) ) // mO
console . log ( hashids . encode ( 5 ) ) // nR Este código fue escrito con la intención de colocar ID creadas en lugares visibles, como la URL. Por lo tanto, de manera predeterminada, el algoritmo intenta evitar generar palabras de maldición en inglés más comunes generando ID que nunca tienen las siguientes letras una al lado de la otra:
c, f, h, i, s, t, u
Puede personalizar los chars que no deben colocarse uno al lado del otro proporcionando un cuarto argumento al constructor de hashids:
// first 4 arguments will fallback to defaults (empty salt, no minimum length, default alphabet)
const hashids = new Hashids ( undefined , undefined , undefined , 'zyxZYX' ) Si su entorno admite BigInt , puede usar la API estándar para codificarlos y decodificarlos de la misma manera que los números ordinarios.
Intentar decodificar un hashid codificado en un entorno BigInt compatible en un entorno no compatible arrojará un error.
Licencia MIT. Ver el archivo de licencia. Puede usar hashids en proyectos de código abierto y productos comerciales. No rompas Internet. Kthxbye.