جلوگیری از تکراری بودن عدد تصادفی

سلام . من یه عدد 20 رقمی تصادفی با استفاده از تابع زیر برای صدور فاکتور خرید نیاز دارم و باید تکراری نباشه .


PHP:
function tasadofi($faghat_adad=0){
	mt_srand ((double)microtime()*10000000);
	$maxran20 = 10000000;
	$random2 = mt_rand(100, $maxran20);
	$random_number = "$random2";
	if ($faghat_adad==0) $random_number = md5($random_number);
	$random_number=substr($random_number,1,20);
	return	$random_number;
}

با استفاده از تابع فوق من عدد تصادفی رو به دست میارم ولی مشکلم اینجاست که وقتی با دیتابیس چک می کنم و می بینم که تکراری هست چی کار باید بکنم که تابع یه عدد دیگه برگردنه ؟

این هم کوئری من :


PHP:
$select=mysql_query(" SELECT `code` FROM `order` ") or die("NOT SELECT ORDER TABLE , LINE : ".__lINE__);
	$rows=mysql_fetch_array($select);
	$code_db=$rows[code];

از افراد متخصص پرسیدم و گفتند که باید از حلقه تکرار do - while استفاده کنم !
ممنون می شم اگه کسی زحمت این حلقه تکرار رو بکشه . یک دنیا ممنون
 
آخرین ویرایش:

I.NoBody

Active Member
چون کلمه ات 20 کاراکتریه، احتمال تکراری بودنش خیلی کمه.
تو می تونی توی یک حلقه، عددت رو تولید کنی، و بلافاصله بعدش بر اساس اون عدد کوئری بگیری، اگه کوئری رکوردی برگردوند، اونوقت می دونی که تکراریه در غیر اینصورت از حلقه خارج شی و insert کنی. اینجوری شاید اگه بدشانس باشی،حلقه نهایتاً 2,3 بار تکرار بشه و سنگین نمیشه.
راه دیگه ات اینه که فیلد دیتابیست رو unique کنی، بعد توی برنامه مستقیماً insert کنی. اگه تکراری نباشه که insert میشه. اگه هم تکراری بود error مناسب بر می گردونه و با چک کردن ارورت، می فهمی که آیا دوباره باید عدد رو تولید و اینسرت کنی یا نه؟
البته تو راه دوم باید اررور ها رو کاربر نبینه.
 

justpersian

Member
شما می تونی از تابع time استفاده کنی و یا تابع rand رو با time جمع کنی !
اینطوری امکان تکراری بودن اصلا وجو نداره
PHP:
<?php
  $rand = rand() + time();
  echo $rand;
?>
موفق باشی
 
سلام . جناب justpersian اینجوری هم امکان تکراری بودن خیلی کمه ولی من می خوام که اگه هر هزار سال یکبار بخواد تکراری در بیاد جلوی اینکار رو بگیرم . :razz:
جناب I,NoBody امکانش هست که کدش رو اینجا قرار یدید ؟ ممنون
 

justpersian

Member
سلام . جناب justpersian اینجوری هم امکان تکراری بودن خیلی کمه ولی من می خوام که اگه هر هزار سال یکبار بخواد تکراری در بیاد جلوی اینکار رو بگیرم . :razz:
جناب I,NoBody امکانش هست که کدش رو اینجا قرار یدید ؟ ممنون

تابع date از سال 1970 میلادی داره ثانیه ها رو میشماره !
فکر نکنم دیگه این تکراری بشه :)
در هر صورت موفق باشی
 

I.NoBody

Active Member
کد:
<?php
$rand=rand(2000,10000);
$result=mysql_query("SELECT id FROM table WHERE code='$rand'");
while (mysql_num_rows($result)>0){
$rand=rand(2000,10000);
$result=mysql_query("SELECT id FROM table WHERE code='$rand'");	
}
mysql_query("INSERT INTO table ....");
?>
البته مقدار $rand رو شما با پروسه خودت تولید کن
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا