HASHIDS -это небольшая библиотека JavaScript для генерации идентификаторов, подобных YouTube, от номеров. Используйте его, когда вы не хотите подвергать идентификаторы базы данных пользователю: http://hashids.org/javascript
Установите хешиды через:
yarn add hashids (или просто непосредственно используйте код на 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 ) ) ПРИМЕЧАНИЕ. При использовании узла, который поддерживает условную экспорт, require('hashids') (версия> = 13) также будет работать.
< script type =" text/javascript " src =" hashids.min.js " > </ script >
< script type =" text/javascript " >
var hashids = new Hashids ( ) ;
console . log ( hashids . encode ( 1 ) ) ;
</ script > import или require , основываясь на среде (см. Выше). Если вы хотите использовать синтаксис модуля CommonJS ( require ), вам необходимо установить типы Node.js из DefinitelyTyped репозитория.
npm install @types/node
Если вы хотите использовать синтаксис ESM ( import Hashids from 'hashids' ), вам необходимо будет включить следующие варианты в свой tsconfig.json .
{
"allowSyntheticDefaultImports" : true ,
"esModuleInterop" : true
} Выше не требуется, если вы импортируете версию CommonJS напрямую: import Hashids from 'hashids/cjs' .
Если вы получите ошибки, указывающие: Cannot find name 'BigInt' , добавить "esnext.bigint" или "esnext" в ваш файл tsconfig.json , под "lib" :
{
"compilerOptions" : {
...
"lib" : [
" esnext.bigint " ,
...
]
}
} Обратите внимание, что ваша среда на самом деле не должна поддерживать BigInt для функционирования ха -киды.
const hashids = new Hashids ( )
const id = hashids . encode ( 1 , 2 , 3 ) // o2fXhV
const numbers = hashids . decode ( id ) // [1, 2, 3] Еще несколько способов пройти 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 ] ) ) // o2fXhVСделайте ваши идентификаторы уникальными:
Передайте «соль», чтобы сделать ваши идентификаторы уникальными (например, название проекта):
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 ) ) // gPUasbИспользуйте заполнение, чтобы сделать ваши идентификаторы дольше:
Обратите внимание, что удостоверения личности только подходят, чтобы соответствовать как минимум определенной длины. Это не значит, что ваши идентификаторы будут именно такой длиной.
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 ) ) // VolejRejNmПередайте пользовательский алфавит:
const hashids = new Hashids ( '' , 0 , 'abcdefghijklmnopqrstuvwxyz' ) // all lowercase
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // mdfphx Алфавит по умолчанию - abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .
Поскольку v2.0 вы можете даже использовать смайлики в качестве алфавита.
Кодировать шестигранник вместо чисел:
Полезно, если вы хотите кодировать числа, такие как объекты Mongo.
Обратите внимание, что нет ограничений в отношении того, насколько велик шестнадцатеричный номер, вы можете пройти.
var hashids = new Hashids ( )
var id = hashids . encodeHex ( '507f1f77bcf86cd799439011' ) // y42LW46J9luq3Xq9XMly
var hex = hashids . decodeHex ( id ) // 507f1f77bcf86cd799439011Обратите внимание, что это не эквивалент:
const hashids = new Hashids ( )
const id = Hashids . encode ( BigInt ( '0x507f1f77bcf86cd799439011' ) ) // y8qpJL3ZgzJ8lWk4GEV
const hex = Hashids . decode ( id ) [ 0 ] . toString ( 16 ) // 507f1f77bcf86cd799439011 Разница между ними заключается в том, что встроенный encodeHex всегда будет привести к одинаковой длине, даже если он содержит ведущие нули.
Например hashids.encodeHex('00000000') будет кодировать в qExOgK7 и декодировать обратно в '00000000' (информация о длине сохраняется).
При декодировании выход всегда является массивом чисел (даже если вы кодируете только одно число):
const hashids = new Hashids ( )
const id = hashids . encode ( 1 )
console . log ( hashids . decode ( id ) ) // [1]Кодирование отрицательных чисел не поддерживается.
Если вы передаете фиктивный ввод, чтобы encode() , будет возвращена пустая строка:
const hashids = new Hashids ( )
const id = hashids . encode ( '123a' )
console . log ( id === '' ) // trueНе используйте эту библиотеку в качестве инструмента безопасности и не кодируйте конфиденциальные данные. Это не библиотека шифрования.
Основной целью Хайхиды является запутывание идентификаторов. Это не подразумевается и не тестируется для использования в качестве инструмента безопасности или сжатия. Сказав это, этот алгоритм действительно старается сделать эти идентификаторы случайными и непредсказуемыми:
Нет повторяющихся шаблонов, показывающих, что в идентификаторе есть 3 идентичных числа:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 5 , 5 , 5 ) ) // A6t1tQТо же самое с увеличенными числами:
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 Этот код был написан с целью размещения созданных идентификаторов в видимых местах, таких как URL. Следовательно, по умолчанию алгоритм пытается избежать генерации наиболее распространенных английских проклятых слов, генерируя идентификаторы, которые никогда не имеют следующих букв рядом друг с другом:
c, f, h, i, s, t, u
Вы можете настроить Chars, которые не должны быть размещены рядом друг с другом, предоставив 4 -й аргумент конструктору Hashids:
// first 4 arguments will fallback to defaults (empty salt, no minimum length, default alphabet)
const hashids = new Hashids ( undefined , undefined , undefined , 'zyxZYX' ) Если ваша среда поддерживает BigInt , вы можете использовать стандартный API для кодирования и декодирования их так же, как обычные числа.
Попытка декодировать газодированный хэшид, кодированный BigInt в неподдерживаемой среде, принесет ошибку.
MIT Лицензия. Смотрите файл лицензии. Вы можете использовать хешиды в проектах с открытым исходным кодом и коммерческими продуктами. Не ломайте Интернет. KTHXBYE.