ورود

نسخه کامل مشاهده نسخه کامل : ساختن عدد 10 رقمی تصادفی عیر تکراری در Php



LOVEMT
03-04-2008, 01:36
سلام دوستان من دارم یه برنامه مینویسم که که در اون نیاز دارم یه عدد 10 رقمی رو به صورت تصادفی تولید کنم و در دیتا بیس ذخیره کنم ! من نمیخام این عدد هیچ وقت تکرار بشه و همیشه یک عدد جدید بسازه ! ممنون میشم اگه تابعی که این کار رو میکنه به من معرفی کنید .. با تشکر .

Bill Gates
03-04-2008, 12:03
اگر کسی هست جواب بده چون منم نیاز فوری دارم
تشکر //

peyman1987
04-04-2008, 00:36
هیچ تابع آماده ای این کار رو نمیکنه.
الگوریتمش اینه که شما اونقدر عدد تصادفی ده رقمی ( بین 1000000000 و 9999999999 ) تولید کنین و با اعداد قبلی مقایسه کنین تا به یه عدد غیر تکراری برسین. بعد اون رو توی دیتابیس میزارین تا دفعه بعد دیگه اونو تولید نکنین.

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

بنظرم اگر فقط unique بودن عدد براتون مهمه از auto increment استفاده کنین. یعنی از 1000000000 شروع کنین و هر بار یه دونه بهش اضافه کنین.

LOVEMT
04-04-2008, 12:23
هیچ تابع آماده ای این کار رو نمیکنه.
الگوریتمش اینه که شما اونقدر عدد تصادفی ده رقمی ( بین 1000000000 و 9999999999 ) تولید کنین و با اعداد قبلی مقایسه کنین تا به یه عدد غیر تکراری برسین. بعد اون رو توی دیتابیس میزارین تا دفعه بعد دیگه اونو تولید نکنین.

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

بنظرم اگر فقط unique بودن عدد براتون مهمه از auto increment استفاده کنین. یعنی از 1000000000 شروع کنین و هر بار یه دونه بهش اضافه کنین.

ok متوجه شدم .. چه جوری عدد تصادفی بسازم !

peyman1987
04-04-2008, 13:10
تابع زیر یه عدد تصادفی بین 1000000000 تا 9999999999 برمیگردونه.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Bill Gates
04-04-2008, 17:42
سلام
این کد رو در کجا قرار بدم؟؟؟؟

saghishab
05-04-2008, 16:53
سلام
این کد رو در کجا قرار بدم؟؟؟؟



دوست عزيز تابع rand يك عدد بر مي گردونه پس شما بايد اين تابع رو لا بلاي كد هاي خودتون بذارين و عددي رو كه بر مي گردونه رو بريزين تو يه متغير و بعد مي تونين با اون متغير هر كاري بكنين مثلا اينطوري
(n$num=rand(100000,99999
print $ num;

Bill Gates
07-04-2008, 14:50
میشه کدش رو برامون اجرا کنید/
تشکر//

LOVEMT
09-04-2008, 16:07
درست نتونستم برنامه رو بفهمم ..

من 20 تا عدد بین 1000000000 تا 9999999999 ساختم و در MySQL ذخیره کردم حالا چکار کنم که از تکرار اون جلوگیری کنم ..

ببین این درسته

باید تمام 20 عدد رو از دیتابیس بازیابی کنم و بعدش در یک ارایه ذخیره کنم و بعد هم یا تابع rand عدد جدید بسازم و اون عدد رو با اون ارایه مقایسه کنم و اگه اون عدد در ارایه وجود نداشت در دیتا بیس ذخیره کنم .
و حالا اگه وجود داشت چی ... ؟؟؟؟

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

با تشکر .

LOVEMT
11-04-2008, 11:04
پیداش کردم !!!


$possible = '23456789bcdfghjkmnpqrstvwxyz';
$code = '';
$i = 0;
while ($i < 10) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}



echo($code);


فقط یکی بگه میتونم مطمئن باشم که Code$ هیچ وقت تکراری نیست !
این رو از تو یه اسکریپت ساختن تصویر امنیتی استخراج کردم درست هم کار میکنه !

behi_joon
11-04-2008, 15:14
با سلام
راحت ترین کار که همونیه که دوستان گفتند که از 1000000000 شروع کنی و به کمک auto_increment یکی یکی بالا بری که قاعدتا هم باید به کارت بیاد.
ولی حالا اگر فرضا به کارت نیومد، تا جاییکه من می دونم تابع rand( min, max) عدد 10 رقمی تولید نمی کنه و برای تولید عدد 10 رقمی خودت باید یه برنامه بنویسی. این برنامه بی این شکل کار می کنه که برای 10 بار 10 تا عدد تصادفی می سازی و به ترتیب اینا رو جای یکان و دهگان و ... می ذاری تا 10 رقمت کامل بشه.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این حلقه عدد 10 رقمی رو توی $random می سازه برات. بعد از دیتا بیست عددا رو بخون و توی یک آرایه بریز و به کمک تابع in_array (what_to_find, search_in); بگرد که این عدد تو این آرایه هست یا نه و اگه بود یکی دیگه بساز. حالا برنامه کاملو این زیر برات می نویسم: (فرض کن $stored_values عددهای تصادفی باشه که از قبل داشتی و از دیتابیس خوندی)



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

فقط حتما حواست باشه قبل این کد مقادیر تصادفی که قبلا ساختی رو بریزی توی آرایه $stored_values

peyman1987
12-04-2008, 18:39
پیداش کردم !!!





فقط یکی بگه میتونم مطمئن باشم که Code$ هیچ وقت تکراری نیست !
این رو از تو یه اسکریپت ساختن تصویر امنیتی استخراج کردم درست هم کار میکنه !

این کدی که شما پیدا کردین به هیچ وجه تضمینی نداره که عدد تصادفی نده!!!!



با سلام
راحت ترین کار که همونیه که دوستان گفتند که از 1000000000 شروع کنی و به کمک auto_increment یکی یکی بالا بری که قاعدتا هم باید به کارت بیاد.
ولی حالا اگر فرضا به کارت نیومد، تا جاییکه من می دونم تابع rand( min, max) عدد 10 رقمی تولید نمی کنه و برای تولید عدد 10 رقمی خودت باید یه برنامه بنویسی. این برنامه بی این شکل کار می کنه که برای 10 بار 10 تا عدد تصادفی می سازی و به ترتیب اینا رو جای یکان و دهگان و ... می ذاری تا 10 رقمت کامل بشه.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این حلقه عدد 10 رقمی رو توی $random می سازه برات. بعد از دیتا بیست عددا رو بخون و توی یک آرایه بریز و به کمک تابع in_array (what_to_find, search_in); بگرد که این عدد تو این آرایه هست یا نه و اگه بود یکی دیگه بساز. حالا برنامه کاملو این زیر برات می نویسم: (فرض کن $stored_values عددهای تصادفی باشه که از قبل داشتی و از دیتابیس خوندی)



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

فقط حتما حواست باشه قبل این کد مقادیر تصادفی که قبلا ساختی رو بریزی توی آرایه $stored_values

کد شما هم یه ایراد داره که با گذشت زمان و زیاد شدن کدها سرعت اجرای برنامه میاد پایین و به حدی میرسه که شاید تولید یه کد تصادفی 1 دقیقه طول بکشه!!!!!





در کل نظر من اینه که اگر قراره این کد بعنوان ID توی دیتابیس استفاده بشه نوشتن همچین چیزی خیلی عذر میخوام احمقانه س. وقتی با auto increment میشه بدون قزبانی کردن زمان و منابع عد دلخواه رو بدست آورد چه نیازی هست که کد بنویسیم.

چند بار باید چرخ رو اختراع کرد؟؟؟!!!!

Naser_helboy
16-04-2008, 19:17
بهترین راهش اینه که اون فیلد کدت رو یونیک تعریف کنی

honey_forogh
21-05-2008, 15:25
salam bacheha man exam daram mishe vasam begid che moghe man mitonam auto increment ro use konam?farghe myisam va innodb ro ham mikham lotfan

dogtag
21-05-2008, 16:36
دومی رو نمی دونم ولی از اولی وقتی استفاده میشه که بخوای هر row که اضافه میشه، خودکار به اون عدد یکی اضافه بشه