Hashids هي مكتبة PHP صغيرة لإنشاء معرفات تشبه YouTube من الأرقام. استخدمه عندما لا تريد الكشف عن المعرفات الرقمية لقاعدة البيانات الخاصة بك للمستخدمين: https://hashids.org/php
اطلب هذه الحزمة، مع Composer، في الدليل الجذر لمشروعك.
composer require hashids/hashids
ثم يمكنك استيراد الفصل إلى التطبيق الخاص بك:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 );
ملاحظة: تتطلب Hashids امتداد
bcmath
أوgmp
لكي تعمل.
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 , 2 , 3 ); // o2fXhV
$ numbers = $ hashids -> decode ( $ id ); // [1, 2, 3]
encode()
: use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 , 2 , 3 ); // o2fXhV
$ hashids -> encode ([ 1 , 2 , 3 ]); // o2fXhV
$ hashids -> encode ( ' 1 ' , ' 2 ' , ' 3 ' ); // o2fXhV
$ hashids -> encode ([ ' 1 ' , ' 2 ' , ' 3 ' ]); // o2fXhV
قم بتمرير اسم المشروع لجعل معرفات الإخراج الخاصة بك فريدة من نوعها:
use Hashids Hashids ;
$ hashids = new Hashids ( ' My Project ' );
$ hashids -> encode ( 1 , 2 , 3 ); // Z4UrtW
$ hashids = new Hashids ( ' My Other Project ' );
$ hashids -> encode ( 1 , 2 , 3 ); // gPUasb
لاحظ أن معرفات الإخراج مبطنة فقط لتناسب طولًا معينًا على الأقل . هذا لا يعني أنها ستكون بهذا الطول بالضبط .
use Hashids Hashids ;
$ hashids = new Hashids (); // no padding
$ hashids -> encode ( 1 ); // jR
$ hashids = new Hashids ( '' , 10 ); // pad to length 10
$ hashids -> encode ( 1 ); // VolejRejNm
use Hashids Hashids ;
$ hashids = new Hashids ( '' , 0 , ' abcdefghijklmnopqrstuvwxyz ' ); // all lowercase
$ hashids -> encode ( 1 , 2 , 3 ); // mdfphx
مفيد إذا كنت تريد تشفير ObjectIds الخاص بـ Mongo. لاحظ أنه لا يوجد حد لحجم الرقم السداسي الذي يمكنك تمريره (ليس من الضروري أن يكون ObjectId الخاص بـ Mongo).
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encodeHex ( ' 507f1f77bcf86cd799439011 ' ); // y42LW46J9luq3Xq9XMly
$ hex = $ hashids -> decodeHex ( $ id ); // 507f1f77bcf86cd799439011
عند فك التشفير، يكون الإخراج دائمًا عبارة عن مجموعة من الأرقام (حتى لو قمت بتشفير رقم واحد فقط):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 );
$ hashids -> decode ( $ id ); // [1]
ترميز الأرقام السالبة غير مدعوم.
إذا قمت بتمرير إدخال زائف إلى encode()
، فسيتم إرجاع سلسلة فارغة:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( ' 123a ' );
$ id === '' ; // true
لا تستخدم هذه المكتبة كإجراء أمني. لا تقم بتشفير البيانات الحساسة معها. Hashids ليست مكتبة التشفير.
الغرض الأساسي من Hashids هو التعتيم على المعرفات الرقمية. لم يتم تصميمه أو اختباره لاستخدامه كأداة أمان أو ضغط. بعد قولي هذا، تحاول هذه الخوارزمية جعل هذه المعرفات عشوائية وغير متوقعة:
لا يوجد نمط يظهر عند تشفير عدة أرقام متطابقة (3 موضح في المثال التالي):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 5 , 5 , 5 ); // A6t1tQ
وينطبق الشيء نفسه عند تشفير سلسلة من الأرقام مقابل تشفيرها بشكل منفصل:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ); // wpfLh9iwsqt0uyCEFjHM
$ hashids -> encode ( 1 ); // jR
$ hashids -> encode ( 2 ); // k5
$ hashids -> encode ( 3 ); // l5
$ hashids -> encode ( 4 ); // mO
$ hashids -> encode ( 5 ); // nR
تمت كتابة هذا الرمز بهدف وضع معرفات الإخراج في أماكن مرئية، مثل عنوان URL. ولذلك، تحاول الخوارزمية تجنب توليد الكلمات اللعينة الإنجليزية الأكثر شيوعًا عن طريق إنشاء معرفات لا تحتوي مطلقًا على الأحرف التالية بجوار بعضها البعض:
c, f, h, i, s, t, u