PHP 中随机长十六进制字符串的生成器
我已经编写了一个字符串生成器,但我不知道如何创建一个长度为100位的随机十六进制字符串,用于插入数据库。所有这些字符串的长度必须相同。
如何生成随机十六进制字符串?
我已经编写了一个字符串生成器,但我不知道如何创建一个长度为100位的随机十六进制字符串,用于插入数据库。所有这些字符串的长度必须相同。
如何生成随机十六进制字符串?
从 PHP 5.3 开始,扩展名为 OpenSSL:
function getRandomHex($num_bytes=4) {
return bin2hex(openssl_random_pseudo_bytes($num_bytes));
}
以 100 位数字为例:
$str = getRandomHex(50);
虽然这回答了OP的问题,但如果你正在寻找的是随机的,那么@danorton答案可能更合适。
喜欢这个:
$val = '';
for( $i=0; $i<100; $i++ ) {
$val .= chr(rand(65, 90));
}
65 是,而 90 是 。如果你不喜欢“幻数”,这个表格可能更具可读性:A
Z
$val = '';
for( $i=0; $i<100; $i++ ) {
$val .= chr(rand(ord('A'), ord('Z')));
}
我会将结果设置为变量并将其移出循环,但出于性能原因:ord()
$A = ord('A');
$Z = ord('Z');
$val = '';
for( $i=0; $i<100; $i++ ) {
$val .= chr(rand($A, $Z));
}
或者你可以粘合s(其中三个)的输出,并减少到100个字符。或者改用(但我会坚持使用)。sha1()
md5()
sha1()
EDIT输出40个字符长的字符串,32个字符长的字符串。因此,如果您不想逐个字符地粘合char(如我上面给出的循环中所示),请尝试此函数sha1()
md5()
function getId($val_length) {
$result = '';
$module_length = 40; // we use sha1, so module is 40 chars
$steps = round(($val_length/$module_length) + 0.5);
for( $i=0; $i<$steps; $i++ ) {
$result .= sha1(uniqid() . md5(rand());
}
return substr($result, 0, $val_length);
}
其中函数参数是要返回的字符串的长度。调用它getId(100);