توليد سلاسل عشوائية في JavaScript: 5 طرق مع كود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيفية توليد سلسلة من الأحرف العشوائية في JavaScript؟ من البسيط إلى الآمن

\n\n

تخيل: أنت تكتب نموذج تسجيل، وتحتاج إلى توليد كلمة مرور مؤقتة لمستخدم جديد. أو ربما تقوم بإنشاء معرف فريد لجلسة، أو مفتاح تنشيط، أو مجرد اسم ملف عشوائي على الخادم. في كل هذه الحالات، يطرح نفس السؤال: كيف يمكن توليد سلسلة من الأحرف العشوائية في JavaScript بسرعة وموثوقية؟

\n\n

هذا السؤال هو أحد أكثر الأسئلة شيوعًا على Stack Overflow (آلاف المشاهدات وعشرات الإجابات المتنوعة). ولكن أي نهج تختار؟ في هذه المقالة، سنستعرض 5 طرق حقيقية لتوليد سلاسل عشوائية، من الأبسط إلى الآمن تشفيريًا، وستفهم متى تستخدم أي طريقة.

\n\n

هيا بنا! 🚀

\n\n

الطريقة 1: الكلاسيكية — Math.random() و toString(36)

\n\n

الطريقة الأكثر إيجازًا، والتي تظهر غالبًا في إجابات Stack Overflow، هي استخدام Math.random() مع toString(36).

\n\n

كيف تعمل؟ Math.random() تُرجع رقمًا من 0 (شامل) إلى 1 (غير شامل). طريقة .toString(36) تحول هذا الرقم إلى سلسلة نصية ذات أساس 36، أي تستخدم الأرقام 0–9 والحروف a–z. مثالية للحصول على نتيجة سريعة!

\n\n
function randomString(length) {\n    let result = '';\n    const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n    const charactersLength = characters.length;\n    for (let i = 0; i < length; i++) {\n        result += characters.charAt(Math.floor(Math.random() * charactersLength));\n    }\n    return result;\n}\n\nconsole.log(randomString(10)); // مثال: "a3f8k2m9x1"\n
\n\n

مزايا وعيوب هذا النهج

\n
    \n
  • المزايا: البساطة، الوضوح، يعمل في أي متصفح و Node.js.
  • \n
  • العيوب: غير مناسب للتشفير (كلمات المرور، الرموز المميزة). Math.random() ليس آمنًا تشفيريًا — يمكن توقعه.
  • \n
\n\n

متى تستخدم: لتوليد معرفات عشوائية في المشاريع التعليمية، أو أسماء الملفات، أو بيانات الاختبار. للإنتاج — فقط إذا كانت الأمان غير مهم.

\n\n

الطريقة 2: سطر واحد قصير (ولكن مع فارق)

\n\n

هناك خدعة شائعة على الإنترنت:

\n\n
const randomStr = (length) => Math.random().toString(36).substring(2, 2 + length);\nconsole.log(randomStr(8)); // مثال: "n4k9v3m2"\n
\n\n

تبدو جميلة، ولكن هناك مشكلة. Math.random().toString(36) يعطي سلسلة بطول حوالي 11–15 حرفًا. إذا كنت بحاجة إلى 20 حرفًا — هذه الطريقة لن تعمل. بالإضافة إلى ذلك، لا تزال غير آمنة.

\n\n

الخلاصة: جيدة للنماذج الأولية السريعة، ولكن ليس للمهام الجادة.

\n\n

الطريقة 3: أبجدية موسعة والتحكم في الأحرف

\n\n

ماذا لو كنت بحاجة إلى أحرف وأرقام ورموز خاصة؟ أو على العكس، تحتاج إلى استبعاد الأحرف المتشابهة (مثل 0 و O، 1 و l)؟ لهذا، نكتب المولد الخاص بنا مع مجموعة أحرف مرنة.

\n\n
function generateSecureString(length, includeSpecial = false) {\n    let chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n    if (includeSpecial) {\n        chars += '!@#$%^&*()_+-=[]{}|;:,./<>?';\n    }\n    let result = '';\n    const charsLength = chars.length;\n    for (let i = 0; i < length; i++) {\n        result += chars.charAt(Math.floor(Math.random() * charsLength));\n    }\n    return result;\n}\n\nconsole.log(generateSecureString(12, true)); // مثال: "A3f!k2M9x1#"\n
\n\n

لماذا هذا مفيد؟

\n
    \n
  • أنت تتحكم بنفسك في مجموعة الأحرف.
  • \n
  • يمكن استبعاد الأحرف غير القابلة للقراءة (مثل رموز التأكيد).
  • \n
  • سهولة إضافة دعم الأرقام والأحرف الكبيرة والصغيرة.
  • \n
\n\n

لكن تذكر: Math.random() لا يزال غير آمن تشفيريًا. لكلمات المرور، من الأفضل استخدام

المدونات

توصيات الكتب