IT-Swarm.Net

PHP مولد سلسلة عشوائية

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

<?php
function RandomString()
{
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randstring = '';
    for ($i = 0; $i < 10; $i++) {
        $randstring = $characters[Rand(0, strlen($characters))];
    }
    return $randstring;
}
RandomString();
echo $randstring;

ما الخطأ الذي افعله؟

731
Captain Lightning

للإجابة على هذا السؤال على وجه التحديد ، مشكلتين:

  1. $randstring ليس في نطاق عندما صدى ذلك.
  2. لا يتم الحصول على متسلسل الأحرف في الحلقة.

إليك مقتطف الشفرة مع التصحيحات:

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[Rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

إخراج سلسلة عشوائية مع الدعوة أدناه:

// Echo the random string.
// Optionally, you can give it a desired string length.
echo generateRandomString();

يرجى ملاحظة أن هذا يولد سلاسل عشوائية يمكن التنبؤ بها. إذا كنت ترغب في إنشاء رموز آمنة ، راجع هذه الإجابة .

1271
Stephen Watkins

استضافة سحابة سريعة وموثوقة وبأسعار معقولة

اشترك واحصل على $50 مكافأة خلال 30 يومًا!

ملاحظة: str_shuffle() داخليًا تستخدم Rand() ، وهذا غير مناسب لأغراض التشفير (مثل إنشاء كلمات مرور عشوائية). تريد مولد رقم عشوائي آمن بدلاً من ذلك. كما أنه لا يسمح لتكرار الحروف.

طريقة أخرى.

محدث(الآن هذا يولد أي طول السلسلة):

function generateRandomString($length = 10) {
    return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length);
}

echo  generateRandomString();  // OR: generateRandomString(24)

هذا هو. :)

346
Pr07o7yp3

هناك الكثير من الإجابات على هذا السؤال ، لكن لا أحد منها يستفيد من { Cryptographically Secure Pseudo-Random Number Generator (CSPRNG).

الإجابة البسيطة والآمنة والصحيحة هي استخدام RandomLib وعدم إعادة اختراع العجلة.

بالنسبة لأولئك الذين يصرون على اختراع الحل الخاص بك ، PHP 7.0.0 ستوفر random_int() لهذا الغرض ؛ إذا كنت لا تزال على PHP 5.x ، فقد كتبنا PHP 5 polyfill لـ random_int() حتى تتمكن من استخدام API الجديد حتى قبل الترقية إلى PHP 7.

(إنشاء أعداد عشوائية عشوائية بأمان في PHP ليست مهمة تافهة. يجب عليك دائمًا التحقق من خبراء تشفير StackExchange المقيمون الخاص بك قبل نشر خوارزمية محلية المنشأ في الإنتاج.

مع وجود مولد عدد صحيح وآمن ، فإن إنشاء سلسلة عشوائية باستخدام CSPRNG هو المشي في الحديقة.

إنشاء سلسلة آمنة وعشوائية

/**
 * Generate a random string, using a cryptographically secure 
 * pseudorandom number generator (random_int)
 * 
 * For PHP 7, random_int is a PHP core function
 * For PHP 5.x, depends on https://github.com/paragonie/random_compat
 * 
 * @param int $length      How many characters do we want?
 * @param string $keyspace A string of all possible characters
 *                         to select from
 * @return string
 */
function random_str($length, $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
{
    $pieces = [];
    $max = mb_strlen($keyspace, '8bit') - 1;
    for ($i = 0; $i < $length; ++$i) {
        $pieces []= $keyspace[random_int(0, $max)];
    }
    return implode('', $pieces);
}

الاستخدام :

$a = random_str(32);
$b = random_str(8, 'abcdefghijklmnopqrstuvwxyz');

عرض توضيحي : https://3v4l.org/b4PST (تجاهل PHP 5 إخفاقات ؛ يحتاج إلى random_compat)

286
Scott Arciszewski

ينشئ سلسلة hexdec بطول 20 حرفًا:

$string = bin2hex(openssl_random_pseudo_bytes(10)); // 20 chars

في PHP 7 ( random_bytes () ):

$string = base64_encode(random_bytes(10)); // ~14 chars, includes /=+
// or
$string = substr(str_replace(['+', '/', '='], '', base64_encode(random_bytes(32))), 0, 32); // 32 chars, without /=+
// or
$string = bin2hex(random_bytes(10)); // 20 chars, only 0-9a-f
128
Rudie

@ tasmaniski: إجابتك عملت بالنسبة لي. كانت لدي نفس المشكلة ، وأود أن أقترحها لأولئك الذين يبحثون عن نفس الإجابة. ومن هنا من tasmaniski:

<?php 
    $random = substr(md5(mt_Rand()), 0, 7);
    echo $random;
?>
82
Humphrey

بناءً على طلبك (أردت إنشاء كلمات مرور) ، يمكنك استخدام

$string = base64_encode(openssl_random_pseudo_bytes(30));

كونه base64 ، قد يحتوي على = أو - بالإضافة إلى الأحرف المطلوبة. يمكنك إنشاء سلسلة طويلة ، ثم تصفيتها وتقليمها لإزالة هذه.

يبدو أن openssl_random_pseudo_bytes هي الطريقة الموصى بها لإنشاء رقم عشوائي مناسب في php. لماذا Rand لا يستخدم /dev/random لا أعرف.

43
rjmunro

أعلم أن هذا قد يكون متأخراً بعض الشيء في اللعبة ، لكن هنا عبارة عن سطر واحد بسيط يولد سلسلة عشوائية حقيقية دون أي حلقات على مستوى البرنامج النصي أو استخدام مكتبات openssl.

echo substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', mt_Rand(1,10))),1,10);

لتقسيمها حتى المعلمات واضحة

// Character List to Pick from
$chrList = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

// Minimum/Maximum times to repeat character List to seed from
$chrRepeatMin = 1; // Minimum times to repeat the seed string
$chrRepeatMax = 10; // Maximum times to repeat the seed string

// Length of Random String returned
$chrRandomLength = 10;

// The ONE LINE random command with the above variables.
echo substr(str_shuffle(str_repeat($chrList, mt_Rand($chrRepeatMin,$chrRepeatMax))),1,$chrRandomLength);

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

يمكنك إجراء مزيد من العشوائية على هذا ، من خلال اختيار عشوائي لطول السلسلة التي تم إرجاعها ، واستبدال $chrRandomLength بـ mt_Rand(8, 15) (لسلسلة عشوائية بين 8 و 15 حرفًا).

25
Kraang Prime
function generateRandomString($length = 15)
{
    return substr(sha1(Rand()), 0, $length);
}

تادا!

24
Davor

أفضل طريقة لتنفيذ هذه الوظيفة هي:

function RandomString($length) {
    $keys = array_merge(range(0,9), range('a', 'z'));

    $key = "";
    for($i=0; $i < $length; $i++) {
        $key .= $keys[mt_Rand(0, count($keys) - 1)];
    }
    return $key;
}

echo RandomString(20);

mt_Rand أكثر عشوائية وفقًا لـ هذا و هذا في php7. دالة Rand هي اسم مستعار لـ mt_Rand.

23
Rathienth Baskaran

$randstring في نطاق الوظيفة ليس هو نفسه النطاق الذي تتصل به. يجب عليك تعيين قيمة الإرجاع إلى متغير.

$randstring = RandomString();
echo $randstring;

أو فقط صدى قيمة الإرجاع مباشرة:

echo RandomString();

أيضا ، في وظيفتك لديك خطأ صغير. ضمن حلقة for ، تحتاج إلى استخدام .= بحيث يتم إلحاق كل حرف بالسلسلة. باستخدام = ، يمكنك الكتابة عليه بكل حرف جديد بدلاً من إلحاقه.

$randstring .= $characters[Rand(0, strlen($characters))];
19
BoltClock

أولاً ، يمكنك تحديد الأبجدية التي تريد استخدامها:

$alphanum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$special  = '~!@#$%^&*(){}[],./?';
$alphabet = $alphanum . $special;

ثم استخدم openssl_random_pseudo_bytes() لإنشاء بيانات عشوائية مناسبة:

$len = 12; // length of password
$random = openssl_random_pseudo_bytes($len);

أخيرًا ، يمكنك استخدام هذه البيانات العشوائية لإنشاء كلمة المرور. نظرًا لأن كل حرف في $random يمكن أن يكون chr(0) حتى chr(255) ، فإن الكود يستخدم الباقي بعد تقسيم قيمته الترتيبية مع $alphabet_length للتأكد من اختيار الأحرف من الأبجدية فقط (لاحظ أن القيام بذلك يتحيز العشوائية):

$alphabet_length = strlen($alphabet);
$password = '';
for ($i = 0; $i < $len; ++$i) {
    $password .= $alphabet[ord($random[$i]) % $alphabet_length];
}

بدلاً من ذلك ، وأفضل بشكل عام ، هو استخدام RandomLib و SecurityLib :

use SecurityLib\Strength;

$factory = new RandomLib\Factory;
$generator = $factory->getGenerator(new Strength(Strength::MEDIUM));

$password = $generator->generateString(12, $alphabet);
14
Ja͢ck

لقد اختبرت أداء معظم الوظائف الشائعة هناك ، والوقت اللازم لإنشاء 1000 سلسلة من 32 رمزًا على صندوقي هو:

2.5 $s = substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,32);
1.9 $s = base64_encode(openssl_random_pseudo_bytes(24));
1.68 $s = bin2hex(openssl_random_pseudo_bytes(16));
0.63 $s = base64_encode(random_bytes(24));
0.62 $s = bin2hex(random_bytes(16));
0.37 $s = substr(md5(Rand()), 0, 32);
0.37 $s = substr(md5(mt_Rand()), 0, 32);

يرجى ملاحظة أنه ليس من المهم كم من الوقت كان بالفعل ولكن الذي هو أبطأ وأيها أسرع حتى تتمكن من اختيار وفقا لمتطلباتك بما في ذلك جاهزية التشفير الخ.

تمت إضافة substr () حول MD5 من أجل الدقة إذا كنت بحاجة إلى سلسلة أقصر من 32 رمزًا.

من أجل الإجابة: لم يتم تسلسل السلسلة ولكن تم الكتابة ولم يتم تخزين نتيجة الوظيفة.

9
Putnik

طرق قصيرة ..

فيما يلي بعض الطرق الأقصر لإنشاء سلسلة عشوائية

<?php
echo $my_Rand_strng = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), -15); 

echo substr(md5(Rand()), 0, 7);

echo str_shuffle(MD5(microtime()));
?>
9
Punit Gajjar
function rndStr($len = 64) {
     $randomData = file_get_contents('/dev/urandom', false, null, 0, $len) . uniqid(mt_Rand(), true);
     $str = substr(str_replace(array('/','=','+'),'', base64_encode($randomData)),0,$len);
    return $str;
}
7
Руслан Ибрагимов

تم أخذ هذا من مصادر المسؤول :

/** Get a random string
* @return string 32 hexadecimal characters
*/
function Rand_string() {
    return md5(uniqid(mt_Rand(), true));
}

المسؤول ، أداة إدارة قاعدة البيانات المكتوبة في PHP.

7
userlond

وظيفة المساعد من Laravel 5 إطار عمل

/**
 * Generate a "random" alpha-numeric string.
 *
 * Should not be considered sufficient for cryptography, etc.
 *
 * @param  int  $length
 * @return string
 */
function str_random($length = 16)
{
    $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    return substr(str_shuffle(str_repeat($pool, $length)), 0, $length);
}
6
artnikpro

إحدى الطرق السريعة جدًا هي القيام بشيء مثل:

substr(md5(Rand()),0,10);

سيؤدي ذلك إلى إنشاء سلسلة عشوائية بطول 10 أحرف. بالطبع ، قد يقول البعض أنها أكثر ثقلًا على الجانب الحسابي ، ولكن في الوقت الحاضر تم تحسين المعالجات لتشغيل خوارزمية md5 أو sha256 بسرعة كبيرة. وبالطبع ، إذا قامت الدالة Rand() بإرجاع القيمة نفسها ، فستكون النتيجة هي نفسها ، مع وجود فرصة 1/32767 في أن تكون هي نفسها. إذا كانت المشكلة تتعلق بالأمان ، فقم فقط بتغيير Rand() إلى mt_Rand()

6
Akatosh
/**
 * @param int $length
 * @param string $abc
 * @return string
 */
function generateRandomString($length = 10, $abc = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
{
    return substr(str_shuffle($abc), 0, $length);
}

مصدر من http://www.xeweb.net/2011/02/11/generate-a-random-string-a-z-0-9-in-php/

5
sxn

خط واحد.
[. _.] الصيام عن سلاسل ضخمة مع بعض التفرد.

function random_string($length){
    return substr(str_repeat(md5(Rand()), ceil($length/32)), 0, $length);
}
4
Jacob Smith

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

لإصلاح ذلك ، قم بتغيير:

$characters = ’0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;

إلى:

$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

وبهذه الطريقة يتم استخدام الأحرف المغلقة فقط ، ولن تكون الأحرف "" جزءًا من السلسلة العشوائية التي يتم إنشاؤها أبدًا.

4
bmcswee

خط واحد آخر ، والذي يولد سلسلة عشوائية من 10 حرف مع الحروف والأرقام. سيقوم بإنشاء صفيف مع range (ضبط المعلمة الثانية لتعيين الحجم) ، حلقات فوق هذا الصفيف وتعيين ascii-char عشوائي (نطاق 0-9 أو a-z) ، ثم ينفّذ الصفيف للحصول على سلسلة.

$str = implode('', array_map(function () { return chr(Rand(0, 1) ? Rand(48, 57) : Rand(97, 122)); }, range(0, 9)));

ملاحظة: يعمل فقط في PHP 5.3+

4
kasimir

لقد أحببت التعليق الأخير الذي استخدم openssl_random_pseudo_bytes ، لكنه لم يكن حلاً بالنسبة لي حيث كان لا يزال يتعين علي إزالة الأحرف التي لم أكن أرغب فيها ، ولم أتمكن من الحصول على سلسلة محددة الطول. إليكم الحل ...

function rndStr($len = 20) {
    $rnd='';
    for($i=0;$i<$len;$i++) {
        do {
            $byte = openssl_random_pseudo_bytes(1);
            $asc = chr(base_convert(substr(bin2hex($byte),0,2),16,10));
        } while(!ctype_alnum($asc));
        $rnd .= $asc;
    }
    return $rnd;
}
3
RKaneKnight
function randomString($length = 5) {
       return substr(str_shuffle(implode(array_merge(range('A','Z'), range('a','z'), range(0,9)))), 0, $length);
}
3
Anjith K P

هناك طريقة أخرى لإنشاء سلسلة عشوائية في PHP هي:

function RandomString($length) {
    $original_string = array_merge(range(0,9), range('a','z'), range('A', 'Z'));
    $original_string = implode("", $original_string);
    return substr(str_shuffle($original_string), 0, $length);
}
echo RandomString(6);
2
Akhilraj N S

معلمة بخط واحد باستخدام فقط PHP وظائف أصلية ، تعمل منذ PHP 5.1.0

str_shuffle(implode('', (array_intersect_key(($map =  array_map('chr', array_merge(array_map('mt_Rand', array_fill(0, $length = 25, 48), array_fill(0,$length,57)),array_map('mt_Rand', array_fill(0, $length, 65), array_fill(0,$length,90)),array_map('mt_Rand', array_fill(0, $length, 97), array_fill(0,$length,122))))), array_flip($keys = array_Rand($map, $length))))))
2
user10099

هناك رمز بسيط:

echo implode("",array_map(create_function('$s','return substr($s,mt_Rand(0,strlen($s)),1);'),array_fill(0,16,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")));

هناك دليل بسيط:

  • لتغيير طول السلسلة ، يرجى تغيير 16 إلى قيمة أخرى ، فقط.
  • للاختيار من بين شخصيات مختلفة ، يرجى تغيير سلسلة الحروف.
2
16ctt1x

هناك بدائل أفضل لهذا ، فقد تم نشر العديد منها بالفعل ، لذا أعطيك فقط أشياءك مع الإصلاحات

<?php
function RandomString()
{
    global $randstring ;
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randstring = '';
    for ($i = 0; $i < 10; $i++) {
        $randstring .= $characters[Rand(0, strlen($characters))];
    }
    return $randstring;
}

RandomString();

echo $randstring;
?>

قد تكون مهتمًا أيضًا بـ:

<?php 


    function RandomString()
    {
        global $randstring ;
        $characters = str_split('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
        array_filter ($characters,function($var)use($characters,&$randstring){
                $randstring .= $characters[Rand(0, count($characters)-1)];
        });
        return $randstring;
    }

    RandomString();echo $randstring.'<hr>';

    //.. OR  ..
    $randstring='';echo(RandomString());

    ?>

أو آخر:

<?php

function s($length){
  for($i=0;($i<$length)and(($what=Rand(1,3))and( (($what==1)and($t=Rand(48,57) ))or (($what==2)and ($t=Rand(65,90))) or (($what==3)and ($t=Rand(97,122)))  ) and  (print chr($t)));$i++);
}
s(10);

?>
2
Constantin
<?php
    /**
     * Creates a random string
     *
     * @param (int) $length
     *   Length in characters
     * @param (array) $ranges
     *   (optional) Array of ranges to be used
     *
     * @return
     * Random string
    */
    function random_string($length, $ranges = array('0-9', 'a-z', 'A-Z')) {
        foreach ($ranges as $r) $s .= implode(range(array_shift($r = explode('-', $r)), $r[1]));
        while (strlen($s) < $length) $s .= $s;
        return substr(str_shuffle($s), 0, $length);
    }

    // Examples:
    $l = 100;
    echo '<b>Default:</b> ' . random_string($l) . '<br />';
    echo '<b>Lower Case only:</b> ' . random_string($l, array('a-z')) . '<br />';
    echo '<b>HEX only:</b> ' . random_string($l, array('0-9', 'A-F')) . '<br />';
    echo '<b>BIN only:</b> ' . random_string($l, array('0-1')) . '<br />';

/* End of file */
1
Geo

أعلم أن هذا سؤال قديم يحتوي على إجابات متعددة ولكن يمكنني محاولة نشر حل بلدي ... استخدم هذه الوظيفة لإنشاء سلسلة أبجدية رقمية مخصصة ...

<?php
  function random_alphanumeric($length) {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345689';
    $my_string = '';
    for ($i = 0; $i < $length; $i++) {
      $pos = mt_Rand(0, strlen($chars) -1);
      $my_string .= substr($chars, $pos, 1);
    }
    return $my_string;
  }
  $test = random_alphanumeric(50); // 50 characters
  echo $test;
?>

مثال (اختبار): Y1FypdjVbFCFK6Gh9FDJpe6dciwJEfV6MQGpJqAfuijaYSZ86

إذا كنت بحاجة إلى سلسلتين فريدتين أو أكثر يمكنك القيام بذلك ...

  $string_1 = random_alphanumeric(50);
  $string_2 = random_alphanumeric(50);
  while ($string_1 == $string_2) {
    $string_1 = random_alphanumeric(50);
    $string_2 = random_alphanumeric(50);
    if ($string_1 != $string_2) {
       break;
    }
  }
  echo $string_1;
  echo "<br>\n";
  echo $string_2;

$ string_1: KkvUwia8rbDEV2aChWqm3AgeUZqyrRbUx2AxVhx5s4TSJ2VwA4

$ string_2: XraO85YfxBBCInafvwipSOJwLmk6JMWiuWOxYQDnXohcn2D8K6

آمل أن تكون هذه المساعدة.

1
Alessandro

الحل سطر واحد سيكون

str_shuffle(base64_encode(date('mdyhis').date('mdyhis')));
1
mujaffars

المصدر: PHP دالة تولد أحرف عشوائية

هذه PHP وظيفة عملت لي:

function cvf_ps_generate_random_code($length=10) {

   $string = '';
   // You can define your own characters here.
   $characters = "23456789ABCDEFHJKLMNPRTVWXYZabcdefghijklmnopqrstuvwxyz";

   for ($p = 0; $p < $length; $p++) {
       $string .= $characters[mt_Rand(0, strlen($characters)-1)];
   }

   return $string;

}

الاستعمال:

echo cvf_ps_generate_random_code(5);
1
Carl

فصل مع بعض الوظائف من المناقشات أعلاه.

$options['numeric'] = true;
$options['uppercase'] = true;
$options['lowercase'] = true;
$new = new RandomString($options);




class RandomString
{
    /**
     * @var array
     */
    private $default = ['numeric' => true, 'uppercase' => true, 'lowercase' => true];

    /**
     * @var array
     */
    private $options;

    /**
     * array
     */
    private $whitelist = ['numeric', 'uppercase', 'lowercase'];

    /**
     * RandomString constructor.
     *
     * @param array $options
     */
    public function __construct(array $options = [])
    {
        $this->options = $this->default;
        if(!empty($options))
        {
            $options = array_intersect_key($options, array_flip($this->whitelist));
            if(empty($options))
            {
                $this->options = $this->default;
            }else
            {
                $this->options = $options;
            }
        }

    }

    /**
     * @return string
     */
    private function returnCharacters(){

        $options = $this->options;

        $numbers = '0123456789';
        $uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $lowercase = "abcdefghijklmnopqrstuvwxyz";

        $characters = '';
        if(isset($options['numeric']) && $options['numeric'] === true){
            $characters .= $numbers;
        }

        if(isset($options['uppercase']) && $options['uppercase'] === true){
            $characters .= $uppercase;
        }

        if(isset($options['lowercase']) && $options['lowercase'] === true){
            $characters .= $lowercase;
        }
        return $characters;

    }

    /**
     * @param $length
     * @param $quantity
     * @return string
     */
    public function randomString($length, $quantity) {

        $string = '';
        $characters = $this->returnCharacters();

        for ($j = 0; $j < $quantity; $j++) {
            for($i = 0; $i < $length; $i++){
                $string .= $characters[mt_Rand(0, strlen($characters) - 1)];
            }
            $string .= "\n";
        }
        return $string;
    }

    /**
     * @return array
     */
    public function getOptions()
    {
        return $this->options;
    }

    /**
     * @return mixed
     */
    public function getWhitelist()
    {
        return $this->whitelist;
    }
1
dixromos98

أخيرا لقد وجدت حلا للحصول على قيمة عشوائية وفريدة من نوعها حل بلدي

substr(md5(time()), 0, 12)

الوقت دائما يعود الطوابع الزمنية وأنها دائما فريدة من نوعها. يمكنك استخدامه مع md5 لجعله أفضل.

1
Muhammad Junaid Aslam

هنا بطانة واحدة. ستحصل على واحدة صغيرة على الأقل ، كبيرة واحدة ، رقم واحد ، ورمز واحد. يستخدم random_int الذي من المفترض أن يكون آمنًا عبر الإنترنت. أنا لا أدعي أن هذا آمن ، على الرغم من. أنا لست خبيرا أمنيا.

لنسخ + لصق:

 for ($chars = array('0123456789','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ','!@#$%^&*()_+-='),$randomString="",$i=0;$i<12;$i++)$randomString .= substr($chars[$i%4], random_int(0,strlen($chars[$i%4])), 1);

وأكثر من ذلك بقليل:

for (
        $chars = array('0123456789','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ','!@#$%^&*()_+-='),
        $randomString="",
        $i=0;
        $i<12;$i++)
        $randomString .= 
            substr($chars[$i%4], 
                random_int(0, strlen($chars[$i%4])), 1);

يمكنني استخدام $chars[$i%4] في الحلقة لاختيار أي مجموعة من الأحرف للحصول على عشوائي من. إنه يضمن شخصيات متعددة من كل مجموعة من الأحرف في الصفيف.

بالتأكيد يمكن تحسينه (توزيع عشوائي لكل مجموعة أحرف موجودة هناك) ، لكنها جيدة بما يكفي لأغراضي.

1
Reed

الدالة التالية تنشئ سلسلة زائفة من أي طول.

/**
 * Returns random string of a given length.
 */
function get_random_string($length) {
  $pull = [];
  while (count($pull) < $length) {
    $pull = array_merge($pull, range(0, 9), range('a', 'z'), range('A', 'Z'));
  }
  shuffle($pull);
  return substr(implode($pull), 0, $length);
}
1
ya.teck

في هذه الطريقة ، يمكنك اختيار طول الحرف أثناء الإنشاء.

<?php
$random_string="";
$character_count=12;
for($i=1; $i<=$character_count; $i++)
{
$random_string.=chr(Rand(97,122));
}
echo $random_string;
?>
1
Nishanth Prabu
function getRandomString($length) {
  $salt = array_merge(range('a', 'z'), range(0, 9));
  $maxIndex = count($salt) - 1;

  $result = '';
  for ($i = 0; $i < $length; $i++) {
    $index = mt_Rand(0, $maxIndex);
    $result .= $salt[$index];
  }
  return $result
}
1
Ryan Williams

أنت تفعل ذلك بشكل خاطئ تمامًا لأنك تعتمد على أرقام وليس أحرفًا ولست متأكدًا مما إذا كنت تريد أن يكون الناتج العشوائي مجرد أرقام ، وإذا كان الأمر كذلك فلماذا الحاجة إلى الحصول على جميع الحروف الأبجدية وجميع الأرقام واستخراج طولها؟ لماذا لا تستخدم فقط Rand(0, 62)؟ ، على الرغم من أنك نسيت تهيئة المتغير $randstring قبل إعلان الوظيفة.

على أي حال ، PHP توفر لك وظيفة مفيدة للغاية لهذا الغرض ، إنها str_shuffle() ، إليك مثال يلائم حاجتك.

<?php

function randomString() {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    return str_shuffle($characters);
}
echo randomString();
1
Wael Assaf

إليك كيفية القيام بذلك للحصول على مفتاح عشوائي فريد من نوعه:

$Length = 10;
$RandomString = substr(str_shuffle(md5(time())), 0, $Length);
echo $RandomString;

يمكنك استخدام الوقت () نظرًا لأنه الطابع الزمني لـ Unix وهو دائمًا فريد من نوعه مقارنة بالعناصر العشوائية الأخرى المذكورة أعلاه. يمكنك بعد ذلك إنشاء md5sum لذلك واتخاذ الطول المطلوب الذي تحتاجه من السلسلة التي تم إنشاؤها MD5 . في هذه الحالة ، أستخدم 10 أحرف ، ويمكنني استخدام سلسلة أطول إذا كنت أرغب في جعلها أكثر فريدة.

آمل أن يساعد هذا.

1
sherpa
function randomString() {
       return md5(Rand(100, 200));
}
0
user2372197
function strgen($len) {
    $buf = '';
    for ($i = 0; $i < $len; $i++) {
        $j = mt_Rand(0, 61);
        if ($j >= 36) {
            $j += 13;
        } else if ($j >= 10) {
            $j += 7;
        }
        $buf .= chr(48 + $j);
    }
    return $buf;
}

بسيطة وأنيقة.

0
ch1p_

هناك 3 أشياء خاطئة في الكود:

  1. لم يتم تعيين $ randstring إلى أي شيء (فقط داخل الوظيفة الخارجة عن النطاق).
  2. تقوم RandomString بإرجاع آخر سمة عشوائية. استبدل = بـ .=.
  3. Rand لا يقوم بإنشاء أرقام عشوائية زائفة آمنة بشكل مشفر. استخدم random_int بدلاً من ذلك.

انظر أدناه:

<?php
    function RandomString()
    {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $randstring = '';
        for ($i = 0; $i < 10; $i++) {
            $randstring .= $characters[random_int(0, strlen($characters))];
        }
        return $randstring;
    }
    $randstring = RandomString();
    echo $randstring;
0
Dan Bray
function randomName($length = 8) {
  $values = array_merge(range(65, 90), range(97, 122), range(48, 57));
  $max = count($values) - 1;
  $str = chr(mt_Rand(97, 122));
  for ($i = 1; $i < $length; $i++) {
    $str .= chr($values[mt_Rand(0, $max)]);
  }
  return $str;
}
0
mrded

مرحبا يمكنك تجربة هذا

<?php


function random($len){

    $char = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    // ----------------------------------------------
    // number of possible combinations
    // ----------------------------------------------
    $pos = strlen($char);
    $pos = pow($pos, $len);
    echo $pos.'<br>';
    // ----------------------------------------------

    $total = strlen($char)-1;
    $text = "";

    for ($i=0; $i<$len; $i++){
        $text = $text.$char[Rand(0, $total)];
    }

    return $text;

}


$string = random(15);
echo $string;



?>

يمكنك أيضًا استخدام md5 في الوقت المحدد ، ولكن يجب عليك استخدام الدالة microtime() ظيفة وليس time() لأنه إذا تم تشغيل عدة مؤشرات ترابط في نفس الثانية ، فستحتاج إلى الحصول على سلسلة مختلفة لكل منها.

<?php

    $string = md5( microtime() );
    echo $string;

?>
0
Aominé