Hashids é uma pequena biblioteca JavaScript para gerar IDs semelhantes ao YouTube a partir de números. Use -o quando não quiser expor seus IDs de banco de dados ao usuário: http://hashids.org/javascript
Instale hashids via:
yarn add hashids (ou apenas use diretamente o código em 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: Ao usar o nó que suporta exportações condicionais, require('hashids') (versão> = 13) também 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 ou require , com base no ambiente (veja acima). Se você deseja usar a sintaxe do módulo Commonjs ( require ), precisará instalar os tipos de node.js no repositório DefinitelyTyped .
npm install @types/node
Se você deseja usar a sintaxe ESM ( import Hashids from 'hashids' ), precisará incluir as seguintes opções em seu tsconfig.json .
{
"allowSyntheticDefaultImports" : true ,
"esModuleInterop" : true
} O exposto acima não é necessário se você importar a versão Commonjs diretamente: import Hashids from 'hashids/cjs' .
Se você receber erros indicando: Cannot find name 'BigInt' , adicione "esnext.bigint" ou "esnext" ao seu arquivo tsconfig.json , em "lib" :
{
"compilerOptions" : {
...
"lib" : [
" esnext.bigint " ,
...
]
}
} Observe que seu ambiente não precisa suportar BigInt para hashids funcionarem.
const hashids = new Hashids ( )
const id = hashids . encode ( 1 , 2 , 3 ) // o2fXhV
const numbers = hashids . decode ( id ) // [1, 2, 3] Mais algumas maneiras de passar para 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 ] ) ) // o2fXhVTorne seus IDs únicos:
Passe um "sal" para tornar seus IDs únicos (por exemplo, um nome de projeto):
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 preenchimento para tornar seus IDs por mais tempo:
Observe que os IDs são acolchoados apenas para caber pelo menos um certo comprimento. Isso não significa que seus IDs serão exatamente esse comprimento.
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 ) ) // VolejRejNmPasse um alfabeto personalizado:
const hashids = new Hashids ( '' , 0 , 'abcdefghijklmnopqrstuvwxyz' ) // all lowercase
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // mdfphx O alfabeto padrão é abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .
Desde v2.0, você pode até usar emojis como o alfabeto.
Codifique hexadecimal em vez de números:
Útil se você deseja codificar números como os objetivos de Mongo.
Observe que não há limite no tamanho de um número hexadecimal que você pode passar.
var hashids = new Hashids ( )
var id = hashids . encodeHex ( '507f1f77bcf86cd799439011' ) // y42LW46J9luq3Xq9XMly
var hex = hashids . decodeHex ( id ) // 507f1f77bcf86cd799439011Observe que este não é o equivalente a:
const hashids = new Hashids ( )
const id = Hashids . encode ( BigInt ( '0x507f1f77bcf86cd799439011' ) ) // y8qpJL3ZgzJ8lWk4GEV
const hex = Hashids . decode ( id ) [ 0 ] . toString ( 16 ) // 507f1f77bcf86cd799439011 A diferença entre os dois é que o encodeHex incorporado sempre resultará no mesmo comprimento, mesmo que contivesse zeros líderes.
Por exemplo hashids.encodeHex('00000000') codificaria a qExOgK7 e decodificaria novamente para '00000000' (as informações de comprimento são preservadas).
Ao decodificar, a saída é sempre uma variedade de números (mesmo se você codificar apenas um número):
const hashids = new Hashids ( )
const id = hashids . encode ( 1 )
console . log ( hashids . decode ( id ) ) // [1]A codificação de números negativos não é suportada.
Se você passar por entrada falsa para encode() , uma string vazia será devolvida:
const hashids = new Hashids ( )
const id = hashids . encode ( '123a' )
console . log ( id === '' ) // trueNão use esta biblioteca como uma ferramenta de segurança e não codifique dados confidenciais. Esta não é uma biblioteca de criptografia.
O objetivo principal dos hashids é ofuscar os IDs. Não é destinado ou testado para ser usado como uma ferramenta de segurança ou compactação. Dito isto, esse algoritmo tenta tornar esses IDs aleatórios e imprevisíveis:
Não há padrões de repetição mostrando que existem 3 números idênticos no ID:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 5 , 5 , 5 ) ) // A6t1tQMesmo com 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 foi escrito com a intenção de colocar IDs criados em locais visíveis, como o URL. Portanto, por padrão, o algoritmo tenta evitar a geração de palavras de maldição em inglês mais comuns, gerando IDs que nunca têm as seguintes letras próximas uma da outra:
c, f, h, i, s, t, u
Você pode personalizar os chars que não devem ser colocados um ao lado do outro, fornecendo um quarto argumento ao construtor Hashids:
// first 4 arguments will fallback to defaults (empty salt, no minimum length, default alphabet)
const hashids = new Hashids ( undefined , undefined , undefined , 'zyxZYX' ) Se o seu ambiente suportar BigInt , você poderá usar a API padrão para codificar e decodificá -los da mesma maneira que os números comuns.
Tentar decodificar um hashid codificado por BigInt em um ambiente não suportado apresentará um erro.
MIT Licença. Veja o arquivo de licença. Você pode usar hashids em projetos de código aberto e produtos comerciais. Não quebre a internet. Kthxbye.