Генератор случайных длинных шестнадцатеричных строк в PHP

Я написал генератор строк, но я не знаю как создать случайный hex строка длиной, например 100 цифр, для вставки в базу данных. Все эти струны должны быть одинаковой длины.

Как я могу генерировать случайные шестнадцатеричные строки?

4 ответов


такой:

$val = '';
for( $i=0; $i<100; $i++ ) {
   $val .= chr( rand( 65, 90 ) );
}

65-это "A", а 90 - "Z". Или вы можете склеить выход sha1()s (три из них) и сократить до 100 символов. Или использовать md5() вместо этого (но я бы придерживался sha1()).

редактировать sha1() выводит 40 символов длинной строки,md5() 32 символов длиной. Поэтому, если вы не хотите клеить char на char (как в loop я дал выше), попробуйте эту функцию

function getId( $valLength )
    $result = '';
    $moduleLength = 40;   // we use sha1, so module is 40 chars
    $steps = round($valLength/$moduleLength) + 0.5);

    for( $i=0; $i<$steps; $++ ) {
      $result .= sha1( uniq() . md5( rand() . uniq() ) );
    }

    return substr( $result, 0, $valLength );
}

где аргумент функции-длина возвращаемой строки. Называть это getId(100); Примечание: Вы должны убедиться, что вы запрашиваете строку не короче длины модуля (что говорит 40 символов для sha1).


начиная с PHP 5.3:

function getRandomHex($num_bytes=4) {
  return bin2hex(openssl_random_pseudo_bytes($num_bytes));
}

для вашего примера 100 цифр:

$str = getRandomHex(50);

$randHexStr = implode( array_map( function() { return dechex( mt_rand( 0, 15 ) ); }, array_fill( 0, $strlen, null ) ) );

где $strlen-длина случайной шестнадцатеричной строки.


liner technique для этого, но его бит сложный и жестко закодированный с точки зрения длины строки.

$rand4 = substr (sha1 (rand (0, getrandmax ())), rand(0,24), 16);

в котором вам нужно изменить последний varibale функции(который я установил в 16) Если вы хотите изменить длину выходной строки и еще одна вещь, есть один rand (0,24), в котором число 24 изменится в соответствии с третьей переменной, оно не должно быть более 40-thirdvariable...