دالة توليد رقم عشوائي لاستخدامه في الكوكيز
السلام عليكم
أنا أستخدم عدة طرق لتوليد رقم عشوائي هذا الرقم العشوائي أستخدمه في الكوكيز لكن رغم أن الرقم عشوائي و معقد فإن هناك إمكانية ولو قليلة جداً في وجود هذا الرقم العشوائي لعضو آخر في قاعدة البيانات, خصوصاً إذا أصبح الموقع كبير لهذا أحتاج دالة تقوم بتوليد رقم عشوائي مع التأكد هل موجود في قاعدة البيانات ام لا إذا كان غير موجود تعطينا الرقم العشوائي إذا كان موجود تقوم بتوليد رقم عشوائي آخر و تقوم بالتأكد هل موجود أم لا و هكذا
4 إجابات
السلام عليكم ,
هناك فكره بسيطه , يمكنك اضافه رقم الاى دى ID الخاص بكل عضو و تشفيره و اضافته إلى الهاش المستخدم . على سبيل المثال : md5(123456-ID) ; بواسطة: Ahsaleh 3 من 3 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا هذه فكرة جميلة جدا ايضا ، ويمكننا استعمال md5(uniqid("100_ID", true)); حتى لا يمكن لاحد تخمينه وهكذا لم يتكرر واحد من مليون من الثانية هذه طريقة اخرة جيدة نعم تقريباً نفس الذي استعمله انا استعملت دالة microtime و strval و sha1 مع اسم العضو لأنه إسم العضو لا يتكرر زي الايدي و بهذه الطريقة لن يتكرر أبداً
ما يريده هو عمل رقم عشوائى لا يمكن ان يتكرر ، طلبك يحل بطريقة نموذجية لو اعتمدت على الوقت ، فالوقت لا يتكرر مرتين الا اذا استعملت الة زمن ، ودالة uniqid تعتمد على الوقت فى توليد رقم عشوائى ولكن لنجعلها اكثر فاعلية من الممكن استخدامها كالتالى
md5(uniqid(mt_rand(), true)); بواسطة: Dina 3 من 3 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا نعم بالفعل هذه هي الفكرة بس على الدالة أن تقوم بالاستعلام من قاعدة البيانات هل الرقم موجود و يعدها تنفذ الأمر ولماذا تستعلم؟ من رابع المستحيلات ولو حتى عندك 19 بليون مدخل ان الرقم بتكرر ، لان الوقت مش بيتكرر الوقت يمكن أن يتكرر مثلا الرابعة مساء اليوم و الرابعة مساء الغذ, أو يمكن أنه بسبب كثرة الزوار يدخل عضوين في نفس الوقت و هناك احتمال ولو OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO,1 في المئة أن يتم توليد نفس الرقم فلمنع هذا من الوقوع الأفضل نعمل الاستعمال حتى نزيل أي شك المايكرو ثانية لا تتكرر مرتين والتاريخ لا يتكرر لان الرابعة مساء اليوم غير الرابعة مساء الغد انت تنسى ان اليوم والشهر والسنة مع الوقت حتى لو كان هذا خذ في الحسبان دخول عدد كبير من الاعداد في وقت واحد هناك احتمال ولو 1 في البليون ان الرقم ممكن يتكرر ورحمة ابوى ما راح يتكرر هههههههه :) ولا تنسى ايضا انك تضيف رقم عشوائى mt_rand مع الميكرو ثانية ، ولو عايز تفحصه من وجوده ام لا .. الاستعلام بسيط للغاية ولكن ليس له داعى ههههههههههه اعمل ايه في دماغي دماغ انشتاين مش عاوز يقتنع
هذه الدالة الرائعة تعطيك متغير عشوائى ويمكنك استرجاعه مرة اخرى
function rand_uniqid($in, $to_num = false, $pad_up = false, $passKey = null) { $index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if ($passKey !== null) { // Although this function's purpose is to just make the // ID short - and not so much secure, // you can optionally supply a password to make it harder // to calculate the corresponding numeric ID for ($n = 0; $n<strlen($index); $n++) { $i[] = substr( $index,$n ,1); } $passhash = hash('sha256',$passKey); $passhash = (strlen($passhash) < strlen($index)) ? hash('sha512',$passKey) : $passhash; for ($n=0; $n < strlen($index); $n++) { $p[] = substr($passhash, $n ,1); } array_multisort($p, SORT_DESC, $i); $index = implode($i); } $base = strlen($index); if ($to_num) { // Digital number <<-- alphabet letter code $in = strrev($in); $out = 0; $len = strlen($in) - 1; for ($t = 0; $t <= $len; $t++) { $bcpow = bcpow($base, $len - $t); $out = $out + strpos($index, substr($in, $t, 1)) * $bcpow; } if (is_numeric($pad_up)) { $pad_up--; if ($pad_up > 0) { $out -= pow($base, $pad_up); } } $out = sprintf('%F', $out); $out = substr($out, 0, strpos($out, '.')); } else { // Digital number -->> alphabet letter code if (is_numeric($pad_up)) { $pad_up--; if ($pad_up > 0) { $in += pow($base, $pad_up); } } $out = ""; for ($t = floor(log($in, $base)); $t >= 0; $t--) { $bcp = bcpow($base, $t); $a = floor($in / $bcp) % $base; $out = $out . substr($index, $a, 1); $in = $in - ($a * $bcp); } $out = strrev($out); // reverse } return $out; }مثال rand_uniqid(9007199254740989);سوف تعطيك 'PpQXn7COf' rand_uniqid('PpQXn7COf', true);سوف تعطيك '9007199254740989' بواسطة: علاء 2 من 2 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا
انظر لهذه الدوال : مجموعة دوال لتوليد كلمة مرور عشوائية بطول معين
بواسطة: MacOS 2 من 2 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا |