[php] (의사) 임의의 영숫자 문자열 생성

PHP에서 ‘d79jd8c’와 같은 (의사) 임의의 영숫자 문자열을 생성하려면 어떻게해야합니까?



답변

먼저 가능한 모든 문자로 문자열을 만드십시오.

 $characters = 'abcdefghijklmnopqrstuvwxyz0123456789';

range () 를 사용 하여 더 빨리 할 수도 있습니다 .

그런 다음 루프에서 임의의 숫자를 선택하고 $characters문자열에 대한 인덱스로 사용 하여 임의의 문자를 가져 와서 문자열에 추가합니다.

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

$random_string_length 무작위 문자열의 길이입니다.


답변

나는이 일을 위해이 기능을 좋아한다

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);


답변

openssl_random_pseudo_bytes 함수를 사용하여 암호화 된 강력한 임의의 (잠재적으로) 8 자 문자열을 생성합니다 .

echo bin2hex(openssl_random_pseudo_bytes(4));

절차 적 방법 :

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

최신 정보:

PHP7은 random_x()더 나은 기능을 도입했습니다 . PHP 5.X에서 온 경우 PHP 7의 random_bytes ()random_int ()에 대한 폴리 필인 우수한 paragonie / random_compat 라이브러리를 사용하십시오 .

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


답변

한 줄 솔루션 :

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

문자열에 다른 길이를 설정하기 위해 substr 매개 변수를 변경할 수 있습니다.


답변

ASCII 테이블 을 사용하여 문자 범위를 선택하십시오. 여기서 $ range_start, $ range_end는 ASCII 테이블의 10 진수 열 값입니다.

이 방법은 문자 범위가 다른 문자열 내에서 특별히 정의 된 방법에 비해 더 좋습니다.

// 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;

더보기:


답변

나는 그것이 오래된 게시물이라는 것을 알고 있지만 Jeremy Ruten의 답변을 기반으로 만들고 의견 제안으로 개선 된 수업에 기여하고 싶습니다.

    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;

      }

    }


답변

단순한 녀석들 ….하지만 각 바이트는 0에서 255 사이의 임의의 문자열임을 기억하십시오. 또한 각 바이트를 나타내는 두 문자가 있음을 기억하십시오.

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