Генератор случайных длинных шестнадцатеричных строк в 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...