مولّد أرقام ونصوص عشوائية
ولّد أرقامًا عشوائية ضمن نطاق بلا تكرار، أو سلاسل عشوائية من الحروف والأرقام والرموز، باستخدام crypto.getRandomValues.
كيفية توليد أرقام ونصوص عشوائية
- 1
اختيار الأرقام أو السلسلة
بدّل بين نطاق من الأرقام، صحيحة أو عشرية، وسلسلة عشوائية تتكون من أنواع الأحرف التي تختارها.
- 2
ضبط النطاق أو الأبجدية
للأرقام، حدد الحد الأدنى والحد الأقصى وهل يُسمح بالتكرار. للسلاسل، فعّل أنواع الأحرف أو عطّلها، أو الصق أبجدية مخصصة من عندك.
- 3
التوليد ونسخ النتيجة
تظهر حتى 10,000 قيمة دفعة واحدة، قيمة في كل سطر، جاهزة للنسخ مباشرة إلى الحافظة.
لماذا crypto.getRandomValues بدل Math.random
دالة Math.random في JavaScript سريعة، لكنها لم تُصمم قط لمقاومة التنبؤ. في بعض المحركات تكفي بضع نتائج منها لإعادة بناء حالتها الداخلية والتنبؤ بكل قيمة تليها. أما crypto.getRandomValues فتأخذ قيمها من المولّد الآمن تشفيريًا في نظام التشغيل، وهو المصدر نفسه الذي تستعمله المتصفحات لإنشاء مفاتيح التشفير، فلا يمكن تخمين أي شيء في التسلسل بمراقبته. تستعمل هذه الأداة هذا المصدر في كل موضع، بما في ذلك خلط القائمة حين يكون التكرار معطلًا.
انحياز باقي القسمة، وكيف يزيله أخذ العينات بالرفض
الطريقة الساذجة لتحويل رقم عشوائي من 32 بت إلى «قيمة من 1 إلى 100» هي أخذ باقي قسمته على 100، لكنها تميل خفية إلى الطرف الأدنى من النطاق. السبب أن 2^32 لا يقبل القسمة على 100 دون باقٍ، فالقيم الزائدة التي لا تكمل مضاعفًا كاملًا تقع كلها على حفنة النتائج نفسها. بدل ذلك تتجاهل هذه الأداة أي سحب يقع في ذلك الباقي غير المتساوي وتعيد المحاولة، وتُسمى هذه الطريقة أخذ العينات بالرفض (rejection sampling). بهذا يكون لكل رقم في النطاق المطلوب احتمال الظهور نفسه تمامًا.
كل قيمة تُولَّد في علامة التبويب هذه
تُنتج الأرقام والسلاسل بالكامل في متصفحك باستخدام Web Crypto API. لا يُرسل أي شيء تولّده إلى خادم ولا يُحفظ في مساحة تخزين المتصفح. والرابط القابل للمشاركة لا يحمل إلا إعداداتك، ولا يحمل القيم نفسها أبدًا، لأن الرابط الذي يمكن توقعه يُفسد الغرض من السحب العشوائي.
الأسئلة الشائعة
لماذا crypto.getRandomValues أفضل من Math.random؟
صُممت Math.random للسرعة لا لصعوبة التنبؤ، وقد ثبت أن نتائجها يمكن إعادة بنائها من عينة صغيرة منها في عدة محركات JavaScript. أما crypto.getRandomValues فتأخذ قيمها من مولّد الأرقام العشوائية الآمن تشفيريًا في نظام التشغيل، ولا يوجد فيه طريق مختصر كهذا.
كيف يعمل خيار «بلا تكرار» مع النطاقات الكبيرة؟
في النطاقات التي تصل إلى خمسة ملايين قيمة ممكنة، تخلط هذه الأداة القائمة كاملة بخوارزمية Fisher-Yates وتأخذ منها العدد الذي طلبته. وفوق ذلك تسحب القيم واحدة تلو الأخرى وتحتفظ بالجديدة فقط. تبقى هذه الطريقة سريعة لأن التكرار نادر حين تطلب قيمًا أقل بكثير مما يحويه النطاق.
ما انحياز باقي القسمة، ولماذا لا تكتفي الأداة بعملية % على النطاق؟
تقليص رقم عشوائي من 32 بت بعملية باقي قسمة عادية يجعل ظهور الطرف الأدنى من نطاقك أرجح بقليل، لأن 2^32 ليس مضاعفًا دقيقًا لمعظم أحجام النطاقات. ترفض هذه الأداة الشريحة الصغيرة من القيم التي تسبب هذا الميل وتعيد سحبها، فتتساوى احتمالات كل النتائج في نطاقك.
هل يمكنني استخدام النتيجة كلمة مرور؟
السلسلة العشوائية التي تولّدها هنا بأبجدية كبيرة وطول كافٍ قوية بقدر كلمة المرور من مولّد مخصص. إذا كنت تريد تحديدًا أرقام الإنتروبيا أو تقييم القوة أو عبارة مرور، فمولّد كلمات المرور مخصص لذلك.
كم رقمًا أو سلسلة يمكنني توليدها دفعة واحدة؟
حتى 10,000 قيمة في دفعة واحدة، سواء كنت تولّد أرقامًا أم سلاسل. هذا يكفي بسعة لسحوبات اليانصيب وبيانات الاختبار وأخذ العينات دون الحاجة إلى تشغيل الأداة مرات متكررة.
هل تغادر القيم المولّدة متصفحي؟
لا. يُنتج كل رقم وكل حرف محليًا باستخدام Web Crypto API، ولا يُرفع أي شيء إلى أي مكان. النسخ إلى الحافظة هو الطريق الوحيد لخروج قيمة من الصفحة، وهو تحت تحكمك بالكامل.
لماذا لا يتضمن الرابط القابل للمشاركة الأرقام نفسها؟
لا يعيد الرابط إلا إعداداتك (النطاق والعدد وهل يُسمح بالتكرار)، ولا يعيد القيم نفسها أبدًا. الرابط القادر على إعادة الأرقام «العشوائية» نفسها عند الطلب يجعلها قابلة للتنبؤ، وهذا يُفسد الغرض من توليدها بهذه الطريقة.