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

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

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

Ответ 1

Как это:

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

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

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

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; $i++ ) {
      $result .= sha1( uniqid() . md5( rand() . uniqid() ) );
    }

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

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

Ответ 2

Начиная с PHP 5.3 с расширением OpenSSL:

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

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

$str = getRandomHex(50);

Ответ 3

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

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

Ответ 4

чтобы сделать это, но его бит сложный и жестко закодированный в терминах длины строки.

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

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