Я написал генератор строк, но я не знаю, как создать случайную шестнадцатеричную строку с длиной, например 100 цифр, для вставки в базу данных. Все эти строки должны быть одинаковой длины.
Как я могу генерировать случайные шестнадцатеричные строки?
Я написал генератор строк, но я не знаю, как создать случайную шестнадцатеричную строку с длиной, например 100 цифр, для вставки в базу данных. Все эти строки должны быть одинаковой длины.
Как я могу генерировать случайные шестнадцатеричные строки?
Как это:
$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).
Начиная с PHP 5.3 с расширением OpenSSL:
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 - длина случайной шестнадцатеричной строки.
чтобы сделать это, но его бит сложный и жестко закодированный в терминах длины строки.
$ rand4 = substr (sha1 (rand (0, getrandmax())), rand (0,24), 16);
в котором вам нужно изменить последнюю переменную функции (которую я установил на 16), если вы хотите изменить длину выходной строки, и еще одна вещь есть один ранд (0,24), в котором число 24 изменится в соответствии с третьим переменная, она не должна быть более 40-й переменной.