به دنبال یک راه سریع و منصفانه برای گرفتن یک عدد تصادفی هستید؟ این تولیدکننده اعداد تصادفی آنلاین و رایگان، یک عدد — یا فهرستی کامل از اعداد — را در هر بازهای که انتخاب کنید تولید میکند؛ از یک بازه ساده ۱ تا ۱۰ گرفته تا بازههایی که تا میلیاردها پیش میروند. حداقل و حداکثر مقدار را در فیلدهای «حداقل» و «حداکثر» تنظیم کنید، تعداد اعدادی که نیاز دارید را در فیلد «تعداد» انتخاب کنید و روی «تولید» کلیک کنید. هر دو مرز در نتیجه لحاظ میشوند، بنابراین بازه ۱ تا ۱۰ میتواند هم ۱ و هم ۱۰ را برگرداند.
هر نتیجه مستقیماً در مرورگر شما و از طریق Web Crypto API (تابع crypto.getRandomValues) تولید میشود — که مقادیر تصادفی قدرتمند از نظر رمزنگاری را از منبع تصادفیِ سیستمعامل فراهم میکند. هیچ چیزی به سرور ارسال نمیشود، هیچ چیزی ثبت نمیشود و ما هرگز اعداد شما را نمیبینیم. تولید آنی و خصوصی است و پس از بارگذاری صفحه، حتی روی اتصال کند نیز به کار خود ادامه میدهد.
گزینهها برای موقعیتهای واقعیای طراحی شدهاند که در آنها مردم واقعاً به اعداد تصادفی نیاز دارند. «بدون تکرار» را فعال کنید تا هیچ عددی دو بار ظاهر نشود — تنظیمی که برای قرعهکشی، بختآزمایی، یا تقسیم افراد به گروهها بدون تکرار به آن نیاز دارید. به بیست برنده از میان ۵۰۰ شرکتکننده نیاز دارید؟ «حداقل» را روی ۱ و «حداکثر» را روی ۵۰۰ تنظیم کنید، «بدون تکرار» را فعال کنید، «تعداد» را روی ۲۰ تنظیم کنید و روی «تولید» کلیک کنید. «ترتیب مرتبسازی» نتیجه را به صورت صعودی یا نزولی مرتب میکند، و یک دکمه تمام نتایج را یکجا کپی میکند. تغییر «قالب خروجی» از «خط جدید» به «جدا شده با فاصله» یا «جدا شده با کاما»، فیلد «تعداد مجموعهها» را نمایان میکند: چندین قرعهکشی مستقل بهطور همزمان — مثلاً بیست مجموعه ۳ تایی برای بیست دور قرعهکشی — و «اجازه تکرار بین مجموعهها» تعیین میکند که آیا یک عدد میتواند در بیش از یکی از آنها ظاهر شود یا نه.
تصادفی بودن در واقع چگونه تولید میشود؟ مرورگر شما مقادیر تصادفی قدرتمند از نظر رمزنگاری را از طریق Web Crypto API فراهم میکند، نه از طریق یک PRNG در JavaScript مانند Math.random(). وقتی روی «تولید» کلیک میکنید، صفحه از طریق crypto.getRandomValues مقادیر تصادفی درخواست میکند و از آنها برای تولید اعداد در بازه انتخابی شما استفاده میکند. منبع اصلی تصادفی بودن توسط سیستمعامل فراهم میشود، بنابراین صفحه نیازی به نگهداری مقدار اولیهی (seed) خاص خود یا یک دنباله شبهتصادفی ندارد.
تبدیل یک مقدار خام به بازه شما دقیقاً جایی است که تولیدکنندهها بیسروصدا دچار اشتباه میشوند و این موضوع سزاوار یک پاراگراف جداگانه است. گرفتن باقیمانده تقسیم مقدار بر اندازه بازه، روش بدیهی و در عین حال جانبدارانه است: مگر اینکه 2^32 دقیقاً بر اندازه بازه بخشپذیر باشد، اعداد کوچکتر کمی بیشتر از بقیه ظاهر میشوند. این نقص modulo bias نامیده میشود و قابل اندازهگیری است، نه صرفاً نظری. این تولیدکننده در عوض هر مقداری را که به بزرگترین مضرب دقیق بازه میرسد یا از آن عبور میکند، کنار میگذارد و دوباره تولید میکند — تکنیکی به نام rejection sampling. این کار چند تلاش اضافی هزینه دارد، اما در ازای آن یک تضمین دقیق میدهد: هر عدد بین «حداقل» و «حداکثر» دقیقاً همان احتمال را دارد، نه احتمالی تقریباً برابر.
در واقع چه چیزی یک عدد را واقعاً تصادفی میکند؟ یک عدد وقتی بهاندازه کافی تصادفی است که نتایج قبلی هیچ چیزی درباره عدد بعدی فاش نکنند — و در عمل سه سطح از این موضوع وجود دارد. یک تابع شبهتصادفی معمولی مانند Math.random() یک الگوریتم قطعی اجرا میکند: هر کسی که وضعیت داخلی آن را بداند میتواند کل دنباله را بازتولید کند، که این ویژگی آن را برای بههمریختن ترتیب اسلایدهای یک ارائه مناسب، اما برای هر موردی که نتیجه نباید قابل پیشبینی باشد نامناسب میکند. یک تولیدکننده امن از نظر رمزنگاری (CSPRNG) — سطحی که این ابزار از آن استفاده میکند — نیز یک الگوریتم است، اما طوری طراحی شده که با استفاده از یک منبع امن از تصادفی بودن سیستم، مقادیر غیرقابل پیشبینی تولید کند و طوری ساخته شده که مشاهده خروجی آن هیچ چیزی درباره مقدار بعدی فاش نکند. تصادفی بودن فیزیکی، از منابعی مانند نویز جوی یا واپاشی رادیواکتیو، بالاتر از هر دو سطح قرار دارد، هرچند وقتی صحبت از تولید یک عدد از یک بازه باشد، تفاوت عملی از بین میرود. دقیقاً به همین دلیل است که مرورگرها بهجای صرفاً بهبود Math.random()، یک API رمزنگاری جداگانه ارائه میدهند: این دو، مسائل متفاوتی را حل میکنند و تنها یکی از آنها زمانی که نتیجه برای کسی اهمیت دارد، امن است.
یک دنباله تصادفی لازم نیست برای انسانها تصادفی به نظر برسد. ده عدد بین ۱ و ۱۰ تولید کنید و بهطور منظم شاهد تکرارهایی مانند ۷، ۷، ۸، یا یک رشته کوتاه که همه اعدادش بالا هستند خواهید بود — و هر یک از این موارد کاملاً عادی است. تصادفی بودن واقعی غیرقابل پیشبینی است، نه بهطور یکنواخت توزیعشده: هر عدد مستقل از اعداد پیشین ظاهر میشود، اعداد قبلی هیچ تأثیری مطلقاً بر اعداد بعدی ندارند، و هیچ عددی هرگز بیشتر از عدد دیگر «نوبتش» نمیرسد. غریزهای که خلاف این را ادعا میکند همان مغالطه قمارباز است، و این دقیقاً همان غریزهای است که خود انسانها را به تولیدکنندههای ضعیف اعداد تصادفی تبدیل میکند — وقتی از ما خواسته میشود یک دنباله تصادفی اختراع کنیم، از تکرار پرهیز میکنیم و مقادیر را بسیار یکنواختتر از آنچه تصادفی بودن هرگز انجام میدهد، توزیع میکنیم. نتیجهای که بهطرز مشکوکی منظم به نظر میرسد، اثر انگشت یک انسان است؛ تصادفی بودن واقعی، خوشه ایجاد میکند.
چرا این تولیدکننده اعداد تصادفی را انتخاب کنیم؟
- تولید فقط در مرورگر: اعداد روی دستگاه شما ساخته میشوند و هرگز به جایی ارسال نمیشوند
- تصادفی بودن با Web Crypto API: امن از نظر رمزنگاری، نه Math.random()
- بدون modulo bias: rejection sampling احتمال برابر برای هر عدد در بازه را حفظ میکند
- هر بازهای: از ۱ تا ۱۰ گرفته تا مقادیری که تا میلیاردها میرسند، با احتساب هر دو مرز
- حالت «بدون تکرار»: فهرستی بدون تکرار برای قرعهکشی و تقسیم گروهها تولید کنید
- مجموعههای متعدد: چندین قرعهکشی مستقل با یک کلیک
- مرتبسازی و قالبهای خروجی: صعودی یا نزولی، خط جدید، فاصله یا کاما
- تاریخچه و ذخیره در فایل: سابقهی یک قرعهکشی که ممکن است لازم باشد توجیهش کنید را نگه دارید
- نامحدود و رایگان: بدون ثبتنام، بدون محدودیت استفاده، هیچ چیز روی سرورهای ما ذخیره نمیشود
اعداد تصادفی در جاهای بسیار بیشتری از آنچه اکثر مردم فکر میکنند استفاده میشوند. معلمها دانشآموزان را بدون تبعیض صدا میزنند. استریمرها و تیمهای بازاریابی برندگان جوایز و قرعهکشیها را جلوی مخاطبانی که باید به نتیجه اعتماد کنند، انتخاب میکنند. بازیکنان یک تاس گمشده را جایگزین میکنند یا تصمیم میگیرند چه کسی اول شروع کند، و در تورنمنتها ترتیب شروع به قید قرعه تعیین میشود. پژوهشگران یک نمونه تصادفی انتخاب میکنند تا یافتههای آنها برای افرادی که در پژوهش شرکت نکردهاند نیز صادق باشد. توسعهدهندگان دادههای آزمایشی تولید میکنند، مقدار اولیه (seed) شبیهسازیها را تنظیم میکنند و در طول QA شناسه انتخاب میکنند. وجه مشترک همه اینها، یک فرایند انتخاب تصادفی است که بعداً میتوان آن را توضیح داد: از آنجا که قرعهکشی از تصادفی بودنِ رمزنگاریشده استفاده میکند و کاملاً روی دستگاه شما انجام میشود، اگر کسی نتیجه را زیر سؤال ببرد، میتوانید نشان دهید که نتیجه چگونه تولید شده است.
این تولیدکننده چند محدودیت معقول دارد که ارزش دانستن دارند. حالت «بدون تکرار» نمیتواند بیش از ظرفیت بازه، عدد تولید کند: بیست مقدار یکتای بین ۱ و ۱۰ اصلاً وجود ندارد. قرعهکشیها مستقل هستند و نتایج قبلی روی نتایج بعدی تأثیری ندارند، بنابراین بارگذاری مجدد صفحه هیچ چرخهای را بازنشانی نمیکند — چون اصلاً چرخهای وجود ندارد که در آن قرار داشته باشید. و هرچند اعداد از نظر رمزنگاری قدرتمند هستند، قرعهکشی در اینجا یک انتخاب منصفانه است، نه یک پیشبینی: قرعهکشیهای رسمی بختآزمایی از تجهیزات فیزیکی یا گواهیشده خودشان استفاده میکنند و هیچ چیز محاسبهشده در مرورگر شما هیچ ارتباطی با آنها ندارد. در چارچوب این محدودیتها، تضمین قدرتمندی برقرار است: هر عدد در بازه شما در هر قرعهکشی، دقیقاً شانس برابری دارد.