عکس پیش‌فرض نوشته

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

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

 

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

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

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

echo md5( time() . mt_rand(1,1000) );       // 774d2de0ce422bf935042b2d99503eae

 

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

 

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

echo uniqid();  // 5b87d9de12899

 

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

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

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

 

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

echo uniqid('pre_');     // pre_5b87dd9332b67

 

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

echo uniqid('',true);     // 5b87dfa7aa0604.08559705

 

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

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

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

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