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 ، بناءً على البيئة (انظر أعلاه). إذا كنت ترغب في استخدام بناء جملة Module 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 لـ Hashids للعمل.
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 التي لا ينبغي وضعها بجوار بعضها البعض من خلال توفير حجة رابعة لمؤسسة Hashids:
// first 4 arguments will fallback to defaults (empty salt, no minimum length, default alphabet)
const hashids = new Hashids ( undefined , undefined , undefined , 'zyxZYX' ) إذا كانت بيئتك تدعم BigInt ، فيمكنك استخدام واجهة برمجة التطبيقات القياسية لتشفيرها وفك تشفيرها بنفس طريقة الأرقام العادية.
إن محاولة فك تشفير حشيد BigInt في بيئة غير مدعومة ستلقي خطأ.
رخصة معهد ماساتشوستس للتكنولوجيا. انظر ملف الترخيص. يمكنك استخدام التجزئة في مشاريع مفتوحة المصدر والمنتجات التجارية. لا تكسر الإنترنت. Kthxbye.