এলোমেলো আলফা-সংখ্যার স্ট্রিং তৈরি করা (সিউডো)


86

আমি কীভাবে একটি (সিউডো) এলোমেলো আলফা-সংখ্যার স্ট্রিং তৈরি করতে পারি, যেমন পিএইচপি-তে 'd79jd8c'?


সমাধানটি সংক্ষিপ্ত এবং অনন্য। এই লিঙ্কটি দেখুন stackoverflow.com/a/34467730/4345141
সৌদ খান

পদ্ধতিটি Random::alphanumericString($length)যা চায় তাই করে। আপনি যদি নিজেরাই এটি তৈরি করতে চান তবে পিএইচপি এর অন্তর্নির্মিত random_bytesবা অন্য কোনও এলোমেলো উত্স ব্যবহার করবেন না random_int
কাবি

উত্তর:


164

আপনার সম্ভাব্য সমস্ত অক্ষর দিয়ে প্রথমে একটি স্ট্রিং করুন:

 $characters = 'abcdefghijklmnopqrstuvwxyz0123456789';

এটি আরও দ্রুত করতে আপনি পরিসীমা () ব্যবহার করতে পারেন ।

তারপরে, একটি লুপে, একটি এলোমেলো সংখ্যা চয়ন করুন এবং $charactersএলোমেলো অক্ষর পেতে স্ট্রিংয়ের সূচক হিসাবে এটি ব্যবহার করুন এবং আপনার স্ট্রিংয়ে এটি যুক্ত করুন:

 $string = '';
 $max = strlen($characters) - 1;
 for ($i = 0; $i < $random_string_length; $i++) {
      $string .= $characters[mt_rand(0, $max)];
 }

$random_string_length এলোমেলো স্ট্রিংয়ের দৈর্ঘ্য।


9
আপনি যদি "এল" এবং "1", "ও" এবং "0" এর মতো দেখতে পাওয়া অক্ষরগুলি সরাতে চান তবে এই বাস্তবায়নটিও দুর্দান্ত। ব্যবহারকারীদের জন্য নতুন পাসওয়ার্ড তৈরি করার সময় এটি সার্থক।
মার্ক নোল্ড

10
আমি এই কৌশলটিও ব্যবহার করি এবং সমস্ত স্বরগুলি অপসারণ করি যাতে আমি দুর্ঘটনাক্রমে কাউকে পাসওয়ার্ডের জন্য অভদ্র কিছু না দিয়ে থাকি।
নিকফ

10
গৌণ উন্নতি: এর mt_rand()জন্য একটি ড্রপ-ইন প্রতিস্থাপন rand()এবং এটি আরও ভাল।
গ্রিলস

11
strlen()প্রতিটি পুনরাবৃত্তি কার্যকর করা ভাল নয়। strlen($characters) - 1একটি পরিবর্তনশীলকে বরাদ্দ করুন এবং চক্রের বাইরে স্ট্রেন সঞ্চালন করুন। এক্ষেত্রে সমালোচনা নয়, তবে এটি কেবল মৌওয়াইস টন
মিনিটবিট

6
ব্যবহার করার কথা বিবেচনা random_int আপনি একটি ক্রিপ্টোগ্রাফি নিরাপদ র্যান্ডম প্রয়োজন।
সত্যই সুন্দর

18

আমি কাজের জন্য এই ফাংশন পছন্দ করি

function randomKey($length) {
    $pool = array_merge(range(0,9), range('a', 'z'),range('A', 'Z'));

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

echo randomKey(20);

14

ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী, এলোমেলোভাবে (সম্ভাব্য) 8- অক্ষরযুক্ত স্ট্রিংটি ওপেনসেল_আরন্ডম_পসিউডো_বাইটস ফাংশনটি ব্যবহার করে :

echo bin2hex(openssl_random_pseudo_bytes(4));

পদ্ধতিগত পদ্ধতি:

function randomString(int $length): string
{
    return bin2hex(openssl_random_pseudo_bytes($length));
}

হালনাগাদ:

পিএইচপি 7 ফাংশনগুলি প্রবর্তন করেছে random_x()যা আরও ভাল হওয়া উচিত। যদি আপনি পিএইচপি 5.X থেকে এসে থাকেন তবে দুর্দান্ত প্যারাগনি / র্যান্ডম_কম্প্যাট লাইব্রেরি ব্যবহার করুন যা পিএইচপি 7 থেকে র্যান্ডম_বাইটস () এবং র্যান্ডম_িন্ট () এর জন্য একটি পলিফিল ।

function randomString($length)
{
    return bin2hex(random_bytes($length));
}

7

একটি লাইন সমাধান:

echo substr( str_shuffle( str_repeat( 'abcdefghijklmnopqrstuvwxyz0123456789', 10 ) ), 0, 7 );

আপনার স্ট্রিংয়ের জন্য আলাদা দৈর্ঘ্য নির্ধারণ করতে আপনি সাবস্ট্রাস্টার প্যারামিটার পরিবর্তন করতে পারেন।


4

অক্ষরের ব্যাপ্তি বাছাই করতে ASCII টেবিলটি ব্যবহার করুন , যেখানে: $ পরিসীমা_আরম্ভ, $ পরিসীমা_ ASCII সারণীর দশমিক কলাম থেকে মান।

আমি দেখতে পেলাম যে বর্ণনাগুলির সীমাটি অন্য স্ট্রিংয়ের মধ্যে নির্দিষ্টভাবে সংজ্ঞায়িত করা হয়েছে সেখানে বর্ণিত পদ্ধতির তুলনায় এই পদ্ধতিটি আরও সুন্দর ।

// range is numbers (48) through capital and lower case letters (122)
$range_start = 48;
$range_end   = 122;
$random_string = "";
$random_string_length = 10;

for ($i = 0; $i < $random_string_length; $i++) {
  $ascii_no = round( mt_rand( $range_start , $range_end ) ); // generates a number within the range
  // finds the character represented by $ascii_no and adds it to the random string
  // study **chr** function for a better understanding
  $random_string .= chr( $ascii_no );
}

echo $random_string;

আরো দেখুন:


4
অ-অক্ষরীয় অক্ষরগুলি ACCII সীমার মধ্যে পড়লেও এটি দুর্দান্ত।
বোর

4

আমি জানি এটি একটি পুরানো পোস্ট তবে আমি জেরেমি রুটেনের উত্তরের উপর ভিত্তি করে তৈরি করা ক্লাসের সাথে অবদান রাখতে এবং মন্তব্যগুলিতে পরামর্শের মাধ্যমে উন্নত করতে চাই:

    class RandomString
    {
      private static $characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
      private static $string;
      private static $length = 8; //default random string length

      public static function generate($length = null)
      {

        if($length){
          self::$length = $length;
        }

        $characters_length = strlen(self::$characters) - 1;

        for ($i = 0; $i < self::$length; $i++) {
          self::$string .= self::$characters[mt_rand(0, $characters_length)];
        }

        return self::$string;

      }

    }

3

সরল ছেলেরা .... তবে মনে রাখবেন প্রতিটি বাইট 0 এবং 255 এর মধ্যে এলোমেলো যা এলোমেলো স্ট্রিংয়ের জন্য ঠিক থাকবে। এছাড়াও মনে রাখবেন প্রতিটি বাইট উপস্থাপনের জন্য আপনার দুটি অক্ষর থাকবে।

$str = bin2hex(random_bytes(32));  // 64 character string returned

এখন পর্যন্ত সেরা উত্তর এবং সংক্ষিপ্ততম কোড! এর ফলে বেশি upvotes পাওয়া উচিত
Sliq

2

4
uniqidকোনওভাবেই এলোমেলো নয়। এটি সম্পূর্ণ অনুমানযোগ্য। এই প্রশ্নটি খুব নির্দিষ্টভাবে সিউডোরানডম স্ট্রিংগুলির সন্ধান করছে।
মেগার

2

আমি কেবলমাত্র ফাংশনটি ঘিরে খেলতে নিম্নলিখিত দ্রুত range()ফাংশনটি করেছি। এটি কেবলমাত্র কাউকে সাহায্য করতে পারে।

Function pseudostring($length = 50) {

    // Generate arrays with characters and numbers
    $lowerAlpha = range('a', 'z');
    $upperAlpha = range('A', 'Z');
    $numeric = range('0', '9');

    // Merge the arrays
    $workArray = array_merge($numeric, array_merge($lowerAlpha, $upperAlpha));
    $returnString = "";

    // Add random characters from the created array to a string
    for ($i = 0; $i < $length; $i++) {
        $character = $workArray[rand(0, 61)];
        $returnString .= $character;
    }

    return $returnString;
}

2

আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন। এটি বিদ্যমান ফাংশনগুলির সাথে সমান এটি বাদে আপনি বিশেষ অক্ষর গণনা জোর করতে পারেন:

function random_string() {
    // 8 characters: 7 lower-case alphabets and 1 digit
    $character_sets = [
        ["count" => 7, "characters" => "abcdefghijklmnopqrstuvwxyz"],
        ["count" => 1, "characters" => "0123456789"]
    ];
    $temp_array = array();
    foreach ($character_sets as $character_set) {
        for ($i = 0; $i < $character_set["count"]; $i++) {
            $random = random_int(0, strlen($character_set["characters"]) - 1);
            $temp_array[] = $character_set["characters"][$random];
        }
    }
    shuffle($temp_array);
    return implode("", $temp_array);
}

1
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 generateRandomString();

1

আপনি যদি এটি করার খুব সহজ উপায় চান তবে আপনি বিদ্যমান পিএইচপি ফাংশনগুলিতে ঝুঁকতে পারেন। এই কোডটি আমি ব্যবহার করি:

substr( sha1( time() ), 0, 15 )

time()যুগের পর থেকে আপনাকে সেকেন্ডে বর্তমান সময় দেয় sha1(), 0-9a-f এর স্ট্রিং এ এটি এনক্রিপ্ট করে এবং substr()আপনাকে একটি দৈর্ঘ্য চয়ন করতে দেয়। আপনাকে 0 টি অক্ষর থেকে শুরু করতে হবে না এবং দুটি সংখ্যার মধ্যে পার্থক্য যাই হোক না কেন স্ট্রিংয়ের দৈর্ঘ্য হবে।



0

জেরেমির উত্তর দুর্দান্ত। যদি, আমার মতো, আপনি কীভাবে ব্যাপ্তি () প্রয়োগ করবেন সে সম্পর্কে আপনি অনিশ্চিত, আপনি আমার সংস্করণটি () ব্যবহার করে দেখতে পারেন see

<?php
$character_array = array_merge(range('a', 'z'), range(0, 9));
$string = "";
    for($i = 0; $i < 6; $i++) {
        $string .= $character_array[rand(0, (count($character_array) - 1))];
    }
echo $string;
?>

এটি জেরেমির মতো ঠিক একই জিনিসটি করে তবে একত্রিত অ্যারে ব্যবহার করে যেখানে সে স্ট্রিং ব্যবহার করে এবং যেখানে (যেখানে) সে স্ট্রেন ব্যবহার করে () ব্যবহার করে।


4
এটি হওয়া দরকারrange('a','z');
মেহেদী কারামোসলি

0

1 লাইন:

$FROM = 0; $TO = 'zzzz';
$code = base_convert(rand( $FROM ,base_convert( $TO , 36,10)),10,36);
echo $code;

0

রিয়েল এলোমেলোতার জন্য টাইপ ইঙ্গিত / র্যান্ড_িন্ট সহ এটি করার আধুনিক উপায়

function random_string(int $size): string
{
    $characters = array_merge(
        range(0, 9),
        range('A', 'Z')
    );

    $string = '';
    $max = count($characters) - 1;
    for ($i = 0; $i < $size; $i++) {
        $string .= $characters[random_int(0, $max)];
    }

    return $string;
}

0

প্রথমে পছন্দসই অক্ষরগুলি তালিকাভুক্ত করুন

$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

Str_shuffle ($ স্ট্রিং) ফাংশনটি ব্যবহার করুন। এই ফাংশনটি আপনাকে এলোমেলোভাবে এলোমেলো স্ট্রিং সরবরাহ করবে।

$alpha=substr(str_shuffle($chars), 0, 50);

50 হ'ল স্ট্রিংয়ের দৈর্ঘ্য।


0
public function randomString($length = 8)
{
    $characters = implode([
        'ABCDEFGHIJKLMNOPORRQSTUWVXYZ',
        'abcdefghijklmnoprqstuwvxyz',
        '0123456789',
        //'!@#$%^&*?'
    ]);

    $charactersLength = strlen($characters) - 1;
    $string           = '';

    while ($length) {
        $string .= $characters[mt_rand(0, $charactersLength)];
        --$length;
    }

    return $string;
}

লোয়ার এবং আপার কেস স্ট্রিংগুলিতে আপনার বিভিন্ন সংখ্যা রয়েছে। এবং ইতিমধ্যে এখানে প্রকাশিত অন্যান্য সমস্ত রূপগুলির চেয়ে এই কোডটির কোনও সুবিধা আছে?
ম্যাগরাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.