PHP 中随机长十六进制字符串的生成器

2022-08-31 00:04:54

我已经编写了一个字符串生成器,但我不知道如何创建一个长度为100位的随机十六进制字符串,用于插入数据库。所有这些字符串的长度必须相同。

如何生成随机十六进制字符串?


答案 1

从 PHP 5.3 开始,扩展名为 OpenSSL:

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

以 100 位数字为例:

$str = getRandomHex(50);

答案 2

虽然这回答了OP的问题,但如果你正在寻找的是随机的,那么@danorton答案可能更合适。


喜欢这个:

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

65 是,而 90 是 。如果你不喜欢“幻数”,这个表格可能更具可读性:AZ

$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);


推荐