PDA

View Full Version : حرفه ای: کمک برای ساخت الگوریتم یک کد رندوم...



thacker
شنبه 04 خرداد 1392, 19:36 عصر
سلام...

من میخوام یه کد 4 رقمی رندوم تولید کنم که بصورت زیر باشه ...

میخوام کد اول 1000 باشه ... بعدش به ترتیب این کدها تولید بشه :

1001
1002
1003
.
.
.
1009
100A
100B
100C
.
.
.
100Z
1010
1011
1012
.
.
.
1019
101A
101B
.
.
.
101Z

و الی آخر ...

این حلقه قراره در فواصل زمانی مختلف انجام شه و هر دفعه ممکنه تعداد تکرارش فرق کنه ... راهی هست که عدد آخری که تولید شده رو ذخیره کنیم و بعدا زمانی که حلقه دوباره خواست شروع شه از آخرین عدد تولید شده شروع به کار کنه ؟

امیدوارم منظورم رو رسونده باشم ...
با تشکر

H:Shojaei
شنبه 04 خرداد 1392, 20:13 عصر
سلام
اگه منظورتون رو فهميده باشم كه ميخوايد اين سري رو توليد كنيد:
اين كه رندم نيست ديگه رنجش كه معلومه فقط يه چند تا حلقه ميخواد با يه چند تا هم شرط.

thacker
شنبه 04 خرداد 1392, 20:58 عصر
بله میخوام این سری رو تولید کنم :لبخندساده:

در واقع میخوام برای هر خریدی که از سایت میشه یک کد توسط این الگوریتم تولید بشه ...
یعنی مثلا اگه کاربر A امروز یک خرید انجام داد کد 1001 تولید بشه و توی دیتابیس ذخیره بشه ... وقتی هم که مثلا کاربر B دو ساعت بعد یک خرید دیگه انجام داد کد 1002 تولید و ذخیره بشه ...
آیا شدنی هست همچین چیزی ؟
با تشکر

thacker
شنبه 04 خرداد 1392, 20:59 عصر
کسی میتونه کدش رو بزاره ؟

engmmrj
شنبه 04 خرداد 1392, 21:37 عصر
$random=array();
$Count=0;
for($i=1001;$i<=9999;$i++){
$random[$Count]=$i;
$Count++;
}
echo array_rand($random,1);

H:Shojaei
شنبه 04 خرداد 1392, 21:51 عصر
ميشه ولي زمانبره. و غير اصولي.
شما بايد اول توي يه تابع با يه چند تا حلقه و شرط سري زير رو توليد كنيد(در حالت كلي) بعد هر بار كه ميخوايد يه مقدار جديدي بهتون بده بايد نسبت به مقداري كه الآن داريد توي اون تابع چك كنيد كه مقدار بعديش چيه؟ همين

engmmrj
شنبه 04 خرداد 1392, 22:09 عصر
function rand_best($min, $max) {
$generated = array();
for ($i = 0; $i < 100; $i++) {
$generated[] = mt_rand($min, $max);
}
shuffle($generated);
$position = mt_rand(0, 99);
return $generated[$position];
}
echo rand_best(1001,9999);
این چطور بود ؟
منبع : http://stackoverflow.com/questions/1041509/php-best-random-numbers

H:Shojaei
شنبه 04 خرداد 1392, 22:22 عصر
سلام
دقيقا چيزي كه ميخوايد:


$sw=0;

//آرايه a-z
$arr=array();
$arr[0]="A" ;
$arr[1]="B";
$arr[2]="C";

//آخرين مقدار دريافتي از بانك
$a="101B";

$x=0;
$ch=0;
//مقدار نهايي
$val=0;

for ($i=1000;$i<1050;$i++)
{
if ($sw==0)
{
$sw=1;
for ($j=0;$j<10;$j++)
{
$i++;
if($ch==1)
{

$val=$i;
$i=1050;
break;
}
if ($i==$a)
{
//echo $x;
$ch=1;
}
}
}
else if($sw==1)
{
$sw=0;
$r=$i;
$i+=10;

for ($j=0;$j<3;$j++)
{

$rem=$r%10;
$r=$r-$rem;
$x=$r/10;

$x=$x.$arr[$j];

if($ch==1)
{
$val=$x;
$i=1050;
break;
}
if ($x==$a)
{
$ch=1;
}

}


}

}
echo $val;


البته براي آرايه بايد مقدار وارد كنيد و حلقه ي 3ومي رو هم تغيير بدين.
موفق باشيد.

H:Shojaei
شنبه 04 خرداد 1392, 23:02 عصر
البته بهينه تر هم ميشه كه باقيش ديگه با خودتون.

Unique
یک شنبه 05 خرداد 1392, 01:15 صبح
من با اصل مطلب مشکل دارم ! معمولا بهترین کار اینه که تولید کد را بر عهده خود database بگذاریم تا نیاز به چک کردن های اضافی نباشه ! حالا میخواین کد را تغیر شکل بدین ! بیاین با یک ثابت XOR کنین یا هر کار دیگه ای که شکلش عوض بشه ! یا بیان با یک عدد خاصی جمع کنید. اما تولید کد برای خرید به نظرم غیر ضروری و نا مناسب میاد.

H:Shojaei
یک شنبه 05 خرداد 1392, 09:33 صبح
من با اصل مطلب مشکل دارم ! معمولا بهترین کار اینه که تولید کد را بر عهده خود database بگذاریم تا نیاز به چک کردن های اضافی نباشه ! حالا میخواین کد را تغیر شکل بدین ! بیاین با یک ثابت XOR کنین یا هر کار دیگه ای که شکلش عوض بشه ! یا بیان با یک عدد خاصی جمع کنید. اما تولید کد برای خرید به نظرم غیر ضروری و نا مناسب میاد.

خب مسلما اين كاملا درسته من هم نميدونم چرا نياز به يه همچين سري دارن شايد واسه كار خاصيه شايد هم...؟؟

thacker
یک شنبه 05 خرداد 1392, 15:08 عصر
سلام
دقيقا چيزي كه ميخوايد:


$sw=0;

//آرايه a-z
$arr=array();
$arr[0]="A" ;
$arr[1]="B";
$arr[2]="C";

//آخرين مقدار دريافتي از بانك
$a="101B";

$x=0;
$ch=0;
//مقدار نهايي
$val=0;

for ($i=1000;$i<1050;$i++)
{
if ($sw==0)
{
$sw=1;
for ($j=0;$j<10;$j++)
{
$i++;
if($ch==1)
{

$val=$i;
$i=1050;
break;
}
if ($i==$a)
{
//echo $x;
$ch=1;
}
}
}
else if($sw==1)
{
$sw=0;
$r=$i;
$i+=10;

for ($j=0;$j<3;$j++)
{

$rem=$r%10;
$r=$r-$rem;
$x=$r/10;

$x=$x.$arr[$j];

if($ch==1)
{
$val=$x;
$i=1050;
break;
}
if ($x==$a)
{
$ch=1;
}

}


}

}
echo $val;


البته براي آرايه بايد مقدار وارد كنيد و حلقه ي 3ومي رو هم تغيير بدين.
موفق باشيد.

با تشکر از شما دوست عزیز ...
این کد رو امتحان کردم اما درست کار نکرد و منم اونقدری وارد نیستم که تغییرش بدم ...
مثلا بعد از عدد 1009 باید 100A رو چاپ کنه ، نه 1010 ... یا اینکه نمیدونم چرا بعضی از اعداد رو که وارد میکنم خروجی 0 میده ... مثلا عدد 1039

H:Shojaei
یک شنبه 05 خرداد 1392, 15:47 عصر
درست شد ديگه مشكل نداره:


<?php


$sw=0;

//آرايه a-z
$arr=array();
$arr[0]="A" ;
$arr[1]="B";
$arr[2]="C";

//آخرين مقدار دريافتي از بانك
$a="1028";

$x=0;
$ch=0;
//مقدار نهايي
$val=0;

for ($i=1000;$i<1050;$i++)
{
if ($sw==0)
{

$sw=1;
for ($j=0;$j<10;$j++)
{

if($ch==1)
{

$val=$i;
$i=1050;
break;
}

if ($i==$a)
{
$ch=1;
}
$i++;

}
$i--;
}
else if($sw==1)
{
$sw=0;
$i--;


$r=$i;

$rem=$r%10;
$r=$r-$rem;
for ($j=0;$j<3;$j++)
{



$x=$r/10;

$x=$x.$arr[$j];

if($ch==1)
{
$val=$x;
$i=1050;
break;
}
if ($x==$a)
{
$ch=1;
}

}




}


}
echo $val;


?>

thacker
یک شنبه 05 خرداد 1392, 20:09 عصر
خیلی خیلی ممنون ... لطف کردی ...
فقط چجوری میتونم کاری کنم که بعد از 109Z نشه 1100 ، بجای 1100 بشه 10A1 ... ؟
یعنی ترتیبش اینجوری شه :
10A1
10A2
.
.
.
10A9
10B1
10B2
.
.
.
10Z9
.
.
.
1A01
.
.
.

H:Shojaei
یک شنبه 05 خرداد 1392, 20:39 عصر
ديگه از اين بيشتر راستشو بگم حسش نيس ديگه همين كدي كه گذاشتم رو تحليل كنيد با يه كمي تغييرات ميتونيد بنويسيدش.
شما بنويسش هرجا به مشكل خوردي تاپيك بزن دوستان كمك ميكنن يا لااقل تيكه تيكه همينجا تكميلش كن.
ببخشيد نيمه كاره ولش كردم البته اون سري اولي كه مد نظر شما بود رو شاختم ولي از اين بيشتر ديگه...
(البته بايد بگم كه امتحان هم دارم)
موفق باشيد.