ممکن است در برنامه خود نیاز داشته باشید تا برای یک کار خاص، شناسه و رشته های یکتایی ایجاد کنید. در این مطلب میخواهیم شما را با روشی ساده و راحت برای ساخت شناسه های منحصر به فرد در زبان برنامه نویسی PHP آشنا کنیم.

ساخت شناسه یکتا در php

 

فرض کنید بخواهید در برنامه ای به فایل های آپلود شده شناسه ای خاص اختصاص دهید تا از تکراری شدن نام فایل ها جلوگیری شود، یا برای شناسایی رکوردهای اطلاعاتی خاص، نیازمند تعریف شناسه یکتا (Unique ID) باشید.

بسیاری از برنامه نویسان از تابع md5() به این منظور استفاده میکنند. همانطور که میدانید تابع md5 برای هش کردن یک رشته استفاده میشود و به نوعی میتوان گفت برای هر رشته متفاوت، یک هش منحصر به فرد ایجاد میکند.

برای مثال به رشته یکتای ایجاد شده به روش زیر توجه کنید.

 

در حالت کلی میتوان گفت که تابع md5 برای این منظور ایجاد نشده و استفاده از آن برای ایجاد شناسه های یکتا در بیشتر موارد، کار حرفه ای نخواهد بود!

 

یک تابع در زبان برنامه نویسی PHP به نام uniqid() وجود دارد که برای همین منظور از آن استفاده میشود.

 

اگر چند بار از این تابع پشت سر هم استفاده کنید، متوجه خواهید شد که شناسه های یکتای ایجاد شده در حروف اول خود با یکدیگر مشترک هستند.

دلیل این مسئله این است که رشته های تولیدی بر اساس زمان لحظه ای سرور ایجاد میشوند.

این ویژگی در استفاده از تابع uniqid دارای یک اثر جانبی جالب و مفید است و آن این است که هر شناسه جدید تولید شده به ترتیب حروف الفبا می آید، بنابراین میتوان آنها را به راحتی و با استفاده از ترتیب حروف الفبا مرتب سازی کرد.

 

برای کاهش شانس ساخته شدن شناسه های تکراری میتوان به ابتدای رشته یکتای تولید شده، بسته به کارمان، یک پیشوند (prefix) اضافه کرد. برای این منظور میتوان از آرگومان ورودی اول تابع uniqid استفاده کرد و یک رشته را به عنوان ورودی به آن پاس داد.

 

این تابع یک آرگومان ورودی دوم نیز به صورت true/false دریافت میکنید. در صورتی که این مقدار true باشد، آنتروپی (entropy) شناسه های ایجاد شده افزایش می یابد. به صورت پیشفرض این مقدار false است و برای جلوگیری از عدم ایجاد شناسه های یکتا در یک لحظه، میتوان این مقدار را تغییر داد.

 

همانطور که قبل تر نیز گفتیم، تابع uniqid یک شناسه یکتا را بر اساس microtime (زمان فعلی به صورت میکروثانیه) ایجاد میکند.

در برخی منابع شناسه تولید شده توسط این تابع را مطلوب نمیدانند زیرا به زمان سرور بستگی دارد و بعضاً برای ایجاد شناسه دشوارتر از لحاظ پیش بینی، همان تابع هش md5 را پیشنهاد میکنند.

در حالت کلی برای یکسری کارهای غیر امنیتی و ایجاد شناسه های یکتا در PHP میتوان از تابع uniqid استفاده کرد.

شناسه های ساخته شده توسط این تابع کوتاه تر از رشته تولید شده توسط md5 خواهند بود و این مورد میتواند در حجم بالا، به صرفه جویی در فضای مصرفی شما منجر شود.