PDA

View Full Version : سوال: md5 تاریخ



Yashar1989
سه شنبه 17 دی 1392, 23:43 عصر
سلام
چطوری میتونم md5 تاریخ که شامل میلی ثانیه هم باشه به دست بیارم؟


و یه سوال دیگه:
این سایتهای آپلود که نام فایل رو بعد از آپلود به صورت رندوم انتخاب میکنن از چه روشی استفاده میکنن که تکراری نمیشه؟

trasilver
سه شنبه 17 دی 1392, 23:55 عصر
این می تونه خوب باشه:

md5(time())

Yashar1989
چهارشنبه 18 دی 1392, 00:01 صبح
در مورد سوال دومم راه حلی نمیدونی؟
چن میخوام حداکثر تا 5 کاراکتر و با حساسیت حروف کوچک و بزرگ ایجاد کنه

trasilver
چهارشنبه 18 دی 1392, 00:59 صبح
در مورد سوال دومم راه حلی نمیدونی؟
چن میخوام حداکثر تا 5 کاراکتر و با حساسیت حروف کوچک و بزرگ ایجاد کنه

نه والا اطلاعی ندارم! تا الآن اصلا با اسکریپت های آپلود سنتر سر و کله نزدم و به کارم نیومده بخوام زیاد روشون بررسی انجام بدم.

می تونید اسکریپت کلیجا رو دانلود بکنید و چیزایی که لازمتون هست رو بردارید.

javadt
چهارشنبه 18 دی 1392, 01:32 صبح
برای ایجاد کد یکت می تونید از تابع زیر استفاده کنید

برای ایجاد کد 13 کاراکتری

uniqid()


uniqid('', true)
برای ایجاد کد 23 کاراکتری

Yashar1989
چهارشنبه 18 دی 1392, 11:37 صبح
ممنون با استفاده از substr پنج کاراکتر اول کد ایجاد شده رو برداشتم

rezaonline.net
چهارشنبه 18 دی 1392, 12:37 عصر
مناسب نیست ، بهتره از یک الگوی دیگه استفاده کنید .
به طور مثال دستور زیر رو بزنید .

<?php
for($i=0;$i<50;$i++)
echo '<br>'.uniqid();
?>

میبینید که تکراری ایجاد میکنه .
پیشنهادم استفاده از این تابع هست .

function randomChar($max=8 , $salt='')
{
static $var='';
$max = (int) $max ;
$str = $var . $salt . time() . mt_rand(1,80). $max . $_SERVER['REMOTE_ADDR'] .microtime(true);
$random = md5($str);
for(;;)
{
$random .= md5($random);
if(strlen($random) >= $max)
break;
}
$var = $random;
return substr($random , 0 , $max);
}



for($i=0;$i<50;$i++)
echo '<br>'.randomChar(5);

SlowCode
چهارشنبه 18 دی 1392, 13:41 عصر
آقا رضا کدی که شما نوشتین بهتره ولی اونم یونیک نیست!
ببینید:


<?php
function randomChar($max=8 , $salt='')
{
static $var='';
$max = (int) $max ;
$str = $var . $salt . time() . mt_rand(1,80). $max . $_SERVER['REMOTE_ADDR'] .microtime(true);
$random = md5($str);
for(;;)
{
$random .= md5($random);
if(strlen($random) >= $max)
break;
}
$var = $random;
return substr($random , 0 , $max);
}


$matched=0;
$range=2000;

for($i=0 ; $i<$range ; $i++)
$ar[]=randomChar(5);

for($i=0 ; $i<$range ; $i++)//Bubble search
for($j=0 ; $j<$i ; $j++)
if ($ar[$i]===$ar[$j])
$matched++;
echo "Matched: $matched";

با بالا رفتن range تعداد خطا هم بیشتر میشه.
مثلا تو تعداد 2000 تا میزان اشتباه از 0 تا 5 تا متغیر بود.
ولی مثلا تو 500 تا بین 0 و 1 بود.

درصد خطاش تقریبا 4، 5 درصد هست.
البته کاملا طبیعی هست چون واقعا نمیشه رشته ای یونیک به طول 5 کاراکتر رو تولید کرد! هرچقدر طول رشته زیاد بشه احتمال خطا کمتر میشه و برعکسش هم صادقه.
الان مثلا تو رنج 2000 تا و طول رشته 4 تا من 41 تا مورد مچ شده هم دیدم!
آقای Yashar1989 (http://barnamenevis.org/member.php?227556-Yashar1989) به نظر من شما حداقل طول رو 8 بزار(البته اگه امکانش رو داری)

rezaonline.net
چهارشنبه 18 دی 1392, 14:14 عصر
من چند بار تست کردم روی 2000 تا نهایتا 4 تا تکراری داشت که صد البته پشت سر هم نبودن :) نکته اش همینه .
بررسی کنید .

<?php
function randomChar($max=8 , $salt='')
{
static $var='';
$max = (int) $max ;
$str = $var . $salt . time() . mt_rand(1,80). $max . $_SERVER['REMOTE_ADDR'] .microtime(true);
$random = md5($str);
for(;;)
{
$random .= md5($random);
if(strlen($random) >= $max)
break;
}
$var = $random;
return substr($random , 0 , $max);
}


$matched=0;
$range=2000;

for($i=0 ; $i<$range ; $i++)
$ar[]=randomChar(5);

for($i=0 ; $i<$range ; $i++)//Bubble search
for($j=0 ; $j<$i ; $j++)
if ($ar[$i]===$ar[$j])
{
$matchedLevel[] = array($i,$j);
$matched++;
}
echo "Matched: $matched";
echo "<hr>";
foreach($matchedLevel as $val)
echo "Level {$val[0]} = Level {$val[1]} <br>";

Yashar1989
چهارشنبه 18 دی 1392, 14:36 عصر
ممنون از پاسخ دوستان
به صورت auto increment میشه تلفیقی از عدد و حروف رو گذاشت؟

SlowCode
چهارشنبه 18 دی 1392, 15:02 عصر
ممنون از پاسخ دوستان
به صورت auto increment میشه تلفیقی از عدد و حروف رو گذاشت؟
نخیر! نوع فیلد لازم int با طول 11 هست. به عبارتی همون Long تو وی بی.

Yashar1989
چهارشنبه 18 دی 1392, 15:11 عصر
نخیر! نوع فیلد لازم int با طول 11 هست. به عبارتی همون Long تو وی بی.
فقط حروف چطور؟
مثلا:
aa
ab
ac
ad
...
ba
bb
bc
bd

چون الان سایت img.ir از همین روش برای نام گذاری فایلهای آپلود شده استفاده میکنه
فقط نمیدونم از چه روشی استفاده میکنه

amin7x
چهارشنبه 18 دی 1392, 15:33 عصر
ببخشید اینجا میپرسم این قضیه for(;;) چی هست و چه کار میکنه؟

SlowCode
چهارشنبه 18 دی 1392, 16:27 عصر
فقط حروف چطور؟
مثلا:
aa
ab
ac
ad
...
ba
bb
bc
bd

چون الان سایت img.ir از همین روش برای نام گذاری فایلهای آپلود شده استفاده میکنه
فقط نمیدونم از چه روشی استفاده میکنه
اونی که شما میگی فرق داره! اگه تو جدولتون نگاه کنین واسه هر عکس یه فیلد آدرس هست که توش نام عکس ذخیره میشه(معمولا اینطوریه)بعد موقع آپلود فایل این نام تولید میشه و ازش استفاده میشه.
حالا یا از روی ایندکس و با یه فرمولی اینو درست میکنه و یا اسم آخرین فایل رو میگیره و یکی بهش اضافه میکنه.
شما میتونی اسم فایل رو md5 مثلا آی دی بزاری.

حالا سایتت به کنار ولی عجب دامینی داری!:لبخند:



ببخشید اینجا میپرسم این قضیه for(;;) چی هست و چه کار میکنه؟


حلقه بی نهایت هست. اگه دقت کنی یه شرط توش گذاشته که وقتی true میشه از حلقه خارج میشه.

Yashar1989
چهارشنبه 18 دی 1392, 19:07 عصر
اونی که شما میگی فرق داره! اگه تو جدولتون نگاه کنین واسه هر عکس یه فیلد آدرس هست که توش نام عکس ذخیره میشه(معمولا اینطوریه)بعد موقع آپلود فایل این نام تولید میشه و ازش استفاده میشه.
حالا یا از روی ایندکس و با یه فرمولی اینو درست میکنه و یا اسم آخرین فایل رو میگیره و یکی بهش اضافه میکنه.
شما میتونی اسم فایل رو md5 مثلا آی دی بزاری.

حالا سایتت به کنار ولی عجب دامینی داری!:لبخند:


حلقه بی نهایت هست. اگه دقت کنی یه شرط توش گذاشته که وقتی true میشه از حلقه خارج میشه.
فکر کنم بهترین راه ادغام اسم فایل + تاریخ و بعدش md5 اون باشه

پ.ن:سایت برای یکی از دوستان هست ، دامینش رو 3 سال پیش قرار بود بخرم بودجم نرسید (مشتری هم زیاد داشت) دیگه خودش سایت رو راه اندازی کرد