تولیدکننده اعداد تصادفی

یک عدد تصادفی، یک فهرست، یا چند مجموعه عدد در هر بازه‌ای تولید کنید — همگی مستقیماً در مرورگر شما و با استفاده از مقادیر تصادفیِ امن از نظر رمزنگاری تولید می‌شوند، هرگز روی سرور.

برای قرعه‌کشی روی «تولید» کلیک کنید
گزینه‌ها

به دنبال یک راه سریع و منصفانه برای گرفتن یک عدد تصادفی هستید؟ این تولیدکننده اعداد تصادفی آنلاین و رایگان، یک عدد — یا فهرستی کامل از اعداد — را در هر بازه‌ای که انتخاب کنید تولید می‌کند؛ از یک بازه ساده ۱ تا ۱۰ گرفته تا بازه‌هایی که تا میلیاردها پیش می‌روند. حداقل و حداکثر مقدار را در فیلدهای «حداقل» و «حداکثر» تنظیم کنید، تعداد اعدادی که نیاز دارید را در فیلد «تعداد» انتخاب کنید و روی «تولید» کلیک کنید. هر دو مرز در نتیجه لحاظ می‌شوند، بنابراین بازه ۱ تا ۱۰ می‌تواند هم ۱ و هم ۱۰ را برگرداند.

هر نتیجه مستقیماً در مرورگر شما و از طریق 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 رمزنگاری جداگانه ارائه می‌دهند: این دو، مسائل متفاوتی را حل می‌کنند و تنها یکی از آن‌ها زمانی که نتیجه برای کسی اهمیت دارد، امن است.

یک دنباله تصادفی لازم نیست برای انسان‌ها تصادفی به نظر برسد. ده عدد بین ۱ و ۱۰ تولید کنید و به‌طور منظم شاهد تکرارهایی مانند ۷، ۷، ۸، یا یک رشته کوتاه که همه اعدادش بالا هستند خواهید بود — و هر یک از این موارد کاملاً عادی است. تصادفی بودن واقعی غیرقابل پیش‌بینی است، نه به‌طور یکنواخت توزیع‌شده: هر عدد مستقل از اعداد پیشین ظاهر می‌شود، اعداد قبلی هیچ تأثیری مطلقاً بر اعداد بعدی ندارند، و هیچ عددی هرگز بیشتر از عدد دیگر «نوبتش» نمی‌رسد. غریزه‌ای که خلاف این را ادعا می‌کند همان مغالطه قمارباز است، و این دقیقاً همان غریزه‌ای است که خود انسان‌ها را به تولیدکننده‌های ضعیف اعداد تصادفی تبدیل می‌کند — وقتی از ما خواسته می‌شود یک دنباله تصادفی اختراع کنیم، از تکرار پرهیز می‌کنیم و مقادیر را بسیار یکنواخت‌تر از آنچه تصادفی بودن هرگز انجام می‌دهد، توزیع می‌کنیم. نتیجه‌ای که به‌طرز مشکوکی منظم به نظر می‌رسد، اثر انگشت یک انسان است؛ تصادفی بودن واقعی، خوشه ایجاد می‌کند.

چرا این تولیدکننده اعداد تصادفی را انتخاب کنیم؟

اعداد تصادفی در جاهای بسیار بیشتری از آنچه اکثر مردم فکر می‌کنند استفاده می‌شوند. معلم‌ها دانش‌آموزان را بدون تبعیض صدا می‌زنند. استریمرها و تیم‌های بازاریابی برندگان جوایز و قرعه‌کشی‌ها را جلوی مخاطبانی که باید به نتیجه اعتماد کنند، انتخاب می‌کنند. بازیکنان یک تاس گم‌شده را جایگزین می‌کنند یا تصمیم می‌گیرند چه کسی اول شروع کند، و در تورنمنت‌ها ترتیب شروع به قید قرعه تعیین می‌شود. پژوهشگران یک نمونه تصادفی انتخاب می‌کنند تا یافته‌های آن‌ها برای افرادی که در پژوهش شرکت نکرده‌اند نیز صادق باشد. توسعه‌دهندگان داده‌های آزمایشی تولید می‌کنند، مقدار اولیه (seed) شبیه‌سازی‌ها را تنظیم می‌کنند و در طول QA شناسه انتخاب می‌کنند. وجه مشترک همه این‌ها، یک فرایند انتخاب تصادفی است که بعداً می‌توان آن را توضیح داد: از آنجا که قرعه‌کشی از تصادفی بودنِ رمزنگاری‌شده استفاده می‌کند و کاملاً روی دستگاه شما انجام می‌شود، اگر کسی نتیجه را زیر سؤال ببرد، می‌توانید نشان دهید که نتیجه چگونه تولید شده است.

این تولیدکننده چند محدودیت معقول دارد که ارزش دانستن دارند. حالت «بدون تکرار» نمی‌تواند بیش از ظرفیت بازه، عدد تولید کند: بیست مقدار یکتای بین ۱ و ۱۰ اصلاً وجود ندارد. قرعه‌کشی‌ها مستقل هستند و نتایج قبلی روی نتایج بعدی تأثیری ندارند، بنابراین بارگذاری مجدد صفحه هیچ چرخه‌ای را بازنشانی نمی‌کند — چون اصلاً چرخه‌ای وجود ندارد که در آن قرار داشته باشید. و هرچند اعداد از نظر رمزنگاری قدرتمند هستند، قرعه‌کشی در اینجا یک انتخاب منصفانه است، نه یک پیش‌بینی: قرعه‌کشی‌های رسمی بخت‌آزمایی از تجهیزات فیزیکی یا گواهی‌شده خودشان استفاده می‌کنند و هیچ چیز محاسبه‌شده در مرورگر شما هیچ ارتباطی با آن‌ها ندارد. در چارچوب این محدودیت‌ها، تضمین قدرتمندی برقرار است: هر عدد در بازه شما در هر قرعه‌کشی، دقیقاً شانس برابری دارد.

FAQ

آیا تصادفی بودن از نظر رمزنگاری امن است؟

از Web Crypto API مرورگر شما (تابع crypto.getRandomValues) استفاده می‌شود، که تصادفی بودن را از منبع امن از نظر رمزنگاری سیستم‌عامل شما دریافت می‌کند. برخلاف توابع ساده شبه‌تصادفی، خروجی آن به‌گونه‌ای طراحی شده که در عمل غیرقابل پیش‌بینی باشد، و rejection sampling به‌جای ترجیح دادن مقادیر کوچک‌تر، احتمال برابر برای هر عدد در بازه را حفظ می‌کند.

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

کوچک‌ترین مقدار ممکن را در فیلد «حداقل» و بزرگ‌ترین را در فیلد «حداکثر» وارد کنید، سپس روی «تولید» کلیک کنید. هر دو مرز در نتیجه لحاظ می‌شوند، بنابراین بازه ۱ تا ۱۰ می‌تواند هم ۱ و هم ۱۰ را نتیجه دهد.

آیا می‌توانم چند عدد تصادفی را یکجا تولید کنم؟

بله. فیلد «تعداد» را روی مقدار موردنیاز (تا ۱۰۰۰) تنظیم کنید و تولیدکننده کل فهرست را با یک کلیک تولید خواهد کرد. سپس می‌توانید همه نتایج را با دکمه کپی به کلیپ‌بورد کپی کنید یا در یک فایل ذخیره نمایید.

آیا می‌توانم چند مجموعه عدد را یکجا تولید کنم؟

بله. «قالب خروجی» را از «خط جدید» به «جدا شده با فاصله» یا «جدا شده با کاما» تغییر دهید تا فیلد «تعداد مجموعه‌ها» نمایان شود. آن را روی تعداد قرعه‌کشی‌های مستقل موردنیاز خود تنظیم کنید — مثلاً بیست مجموعه ۳ تایی برای بیست دور قرعه‌کشی — و انتخاب کنید که آیا یک عدد می‌تواند در مجموعه‌های مختلف تکرار شود یا نه.

آیا می‌توانم اعداد تولیدشده را مرتب کنم؟

بله. از گزینه «ترتیب مرتب‌سازی» برای مرتب کردن هر فهرست به صورت صعودی یا نزولی استفاده کنید، یا آن را روی «هیچ‌کدام» بگذارید تا اعداد به همان ترتیبی که تولید شده‌اند باقی بمانند.

چگونه از اعداد تکراری جلوگیری کنم؟

کلید «بدون تکرار» را فعال کنید. وقتی فعال است، هر عدد تولیدشده در فهرست متفاوت است — ایده‌آل برای قرعه‌کشی، جوایز، یا تقسیم افراد به گروه‌ها. توجه داشته باشید که تعداد نمی‌تواند از اندازه بازه بیشتر شود: نمی‌توانید ۲۰ عدد یکتای بین ۱ و ۱۰ تولید کنید.

چرا اعداد یکسان مدام تکرار می‌شوند؟

چون قرعه‌کشی‌های مستقل می‌توانند تکرار شوند، و تصادفی بودن دقیقاً همین شکل است. هر قرعه‌کشی کاملاً مستقل از قرعه‌کشی‌های قبلی است، بنابراین در بازه ۱ تا ۱۰، احتمال ظاهر شدن یک عدد یکسان دو بار پشت سر هم، هر بار ۱ در ۱۰ است — این معمول است، نه خراب. اگر به فهرستی بدون تکرار نیاز دارید، «بدون تکرار» را فعال کنید؛ این کار عمداً قرعه‌کشی را محدود می‌کند، نه اینکه اشتباهی را اصلاح کند.

چرا یک دنباله تصادفی، تصادفی به نظر نمی‌رسد؟

چون تصادفی بودن واقعی غیرقابل پیش‌بینی است، نه به‌طور یکنواخت توزیع‌شده. مردم انتظار دارند نتیجه تصادفی به‌طور منظم پخش شده باشد، بنابراین خوشه‌ها، تکرارها و رشته‌های کوتاهی مانند ۷، ۷، ۸ مثل خطا به نظر می‌رسند، درحالی‌که دقیقاً همان چیزی هستند که تصادف تولید می‌کند. دنباله‌ای که برای یک انسان منظم به نظر می‌رسد، معمولاً تصادفی نبوده است.

آیا می‌توانم به تصادفی بودنِ تولیدشده در یک مرورگر اعتماد کنم؟

بله، وقتی از Web Crypto API بیاید، همان‌طور که در اینجا این‌گونه است. crypto.getRandomValues با استفاده از تصادفی بودنِ سیستمیِ زیربنایی سیستم‌عامل، مقادیر تصادفی قدرتمند از نظر رمزنگاری فراهم می‌کند، نه از طریق یک PRNG در JavaScript مانند Math.random(). Math.random() چیزی است که برای هر موضوع واقعاً مهمی نباید به آن اعتماد کرد: قطعی است و هرگز برای غیرقابل پیش‌بینی بودن طراحی نشده است.

آیا می‌توان اعداد تصادفی را پیش‌بینی کرد یا روی آن‌ها تأثیر گذاشت؟

در اینجا خیر. مقادیر از تولیدکننده امن از نظر رمزنگاری سیستم‌عامل شما می‌آیند، بنابراین مشاهده نتایج قبلی هیچ چیزی درباره عدد بعدی فاش نمی‌کند، و قرعه‌کشی کاملاً روی دستگاه شما انجام می‌شود — هیچ سروری برای دستکاری و هیچ درخواستی برای رهگیری وجود ندارد. ما هم نمی‌توانیم روی نتایج شما تأثیر بگذاریم، چون هرگز آن‌ها را نمی‌بینیم.

آیا برای انتخاب برندگان جوایز یا قرعه‌کشی‌ها مناسب است؟

بله. به هر شرکت‌کننده یک عدد اختصاص دهید، یک نتیجه در آن بازه تولید کنید، و شرکت‌کننده‌ای که عددش مطابقت دارد برنده می‌شود. از آنجا که منبع از نظر رمزنگاری امن است و قرعه‌کشی کاملاً روی دستگاه شما انجام می‌شود، این فرایند در صورت زیر سؤال رفتن نتیجه توسط یک شرکت‌کننده، به‌راحتی قابل توضیح و مستندسازی است. اگر برای یک بلیط بخت‌آزمایی اعداد انتخاب می‌کنید، این ابزار به‌عنوان یک وسیله انتخاب تصادفی عمل می‌کند، نه پیش‌بینی: قرعه‌کشی‌های رسمی بخت‌آزمایی هیچ ارتباطی با آن ندارند.

آیا بارگذاری مجدد صفحه تصادفی بودن را تغییر می‌دهد؟

خیر، و اصلاً لازم هم نیست. هر قرعه‌کشی از قبل مقادیر تصادفی جدیدی از سیستم‌عامل درخواست می‌کند، بنابراین نتایج مستقل هستند، چه ده بار روی «تولید» کلیک کنید و چه بین هر کلیک صفحه را بارگذاری مجدد کنید. هیچ چرخه‌ای برای راه‌اندازی مجدد و هیچ وضعیتی برای منسوخ شدن وجود ندارد — بارگذاری مجدد فقط نتایج نمایش‌داده‌شده روی صفحه را پاک می‌کند.

آیا تولیدکننده رایگان است، و آیا اعداد من را ذخیره می‌کنید؟

این ابزار کاملاً رایگان است و نیازی به ثبت‌نام ندارد. همه اعداد به‌صورت محلی در مرورگر شما تولید می‌شوند و هرگز دستگاه شما را ترک نمی‌کنند، بنابراین حتی اگر می‌خواستیم هم نمی‌توانستیم نتایج شما را ذخیره یا مشاهده کنیم.