مشکل ساخت عدد تصادفی در php

piuploa

تازه وارد
با سلام خدمت دوستان گرامی

میخواستم یه کدی بزارم توی سایتم که عددی تصادفی و غیرتکراری بسازه

واسه کد رهگیری تراکتش بعد از پرداختش تا هم در table ذخیره بشه هم مشتری بعدا بتونه با کد رهگیریش , رهگیری کنه.

باتشکر

 

zegersot

کاربر عضو
اطلاعاتتون نصب به php چقدره؟

برای این کار یه تیبل میخوای که کدایی که ساخته میشه رو ذخیره کنی

و بعد2 تابع بنویسی

1- تایع ای که کد راندوم بسازه

2- تابع بازگشتی که کد غیرتکراری رو بده بیرون

فک نکنم کسی باشه اینو واستون انجام بده

ولی اگه خودتون اطلاعی دارید سئوال بپرسید یا حداقل 50% کار رو انجام بدید ما واستون کاملش کنیم

موفق باشی

 

parsaphp

تازه وارد
باید با تابع rand یک عدد تولید بشه و در بانک ذخیره بشه و وقتی کد جدید تولید میشه با کد های قبلی که ساخته شده و در بانک اطلاعاتی ذخیره شده مقایسه بشه که تکراری هست یا نه. اگه تکراری نبود که ادامه کار و اگه تکراری بود یه کد تصادفی دیگه تولید بشه.

 

piuploa

تازه وارد
سلام عزیز

باتشکر که جواب دادی

میشه کدش رو بزاری تا دیگران بدون تفکر و سریع کارشون راه انداخته شه؟؟؟

 

parsaphp

تازه وارد
کد:
for($k=0; ; $k++){

    $random_code=rand(100000,999999);
    $select = mysql_query("select * from `table` where `col` = '$random_code'");
        $Row = mysql_fetch_array($select);
        $col = $Row['col'];
    if($col!=$random_code){
        echo $random_code;
        mysql_query("INSERT INTO table VALUES ('NULL','$random_code')");
        break;
    }
}
 

william

کاربر عضو
برای ساخت عدد تصادفی میتونید از time-stamp استفاده کنید. به وسیله تابع time در php

اینجوری دیگه نیازی به چک کردن تکراری بودن عدد نیست.

 

parsaphp

تازه وارد
دوستمون درست میفرمایند. ولی چون به برای کد رهگیری میخواد استفاده بشه بهتره با رندم کار بشه که هر کسی نتونه کد رهگیری با timestamp تولید کنه. (مورد امنیتی)

 

william

کاربر عضو
بله، البته میشه اون مشکل رو هم یه کاری کرد. مثلا یه همچین تابعی میشه نوشت:


کد:
function code_generator() {
    $time = time();
    $random_string = str_shuffle('1234567890ABCDEF');
    $code = hash('md5', $time.$random_string);
    return strtoupper($code);
}
فقط تعداد کاراکترش یه مقدار زیاد میشه. اگه دوست دارید فقط عدد باشه میشه کد رو از مبنای 16 به 10 تبدیل کرد:


کد:
echo base_convert(code_generator(), 16, 10);
فقط تنها مشکل زیاد شدن تعداد کاراکتر هست.

 
بالا