WordPress函数:wp_rand 一个更强大的随机数生成器

追格官方小助手/ 2022年08月26日/ WordPress/ 浏览 1997


WordPress 中提供了很多增强函数,在我们开发WordPress主题和WordPress插件时,充分利用这些函数可以大大提高开发效率。


wp_rand 是一个随机数生成函数,比 php 的原生的随机数生成函数 rand 要强大很多 - 主要是安全性及随机性方面。


函数源码:


function wp_rand( $min = 0, $max = 0 ) {
    global $rnd_value;
 
    // Some misconfigured 32-bit environments (Entropy PHP, for example)
    // truncate integers larger than PHP_INT_MAX to PHP_INT_MAX rather than overflowing them to floats.
    $max_random_number = 3000000000 === 2147483647 ? (float) '4294967295' : 4294967295; // 4294967295 = 0xffffffff
 
    // We only handle ints, floats are truncated to their integer value.
    $min = (int) $min;
    $max = (int) $max;
 
    // Use PHP's CSPRNG, or a compatible method.
    static $use_random_int_functionality = true;
    if ( $use_random_int_functionality ) {
        try {
            $_max = ( 0 != $max ) ? $max : $max_random_number;
            // wp_rand() can accept arguments in either order, PHP cannot.
            $_max = max( $min, $_max );
            $_min = min( $min, $_max );
            $val  = random_int( $_min, $_max );
            if ( false !== $val ) {
                return absint( $val );
            } else {
                $use_random_int_functionality = false;
            }
        } catch ( Error $e ) {
            $use_random_int_functionality = false;
        } catch ( Exception $e ) {
            $use_random_int_functionality = false;
        }
    }
 
    // Reset $rnd_value after 14 uses.
    // 32 (md5) + 40 (sha1) + 40 (sha1) / 8 = 14 random numbers from $rnd_value.
    if ( strlen( $rnd_value ) < 8 ) {
        if ( defined( 'WP_SETUP_CONFIG' ) ) {
            static $seed = '';
        } else {
            $seed = get_transient( 'random_seed' );
        }
        $rnd_value  = md5( uniqid( microtime() . mt_rand(), true ) . $seed );
        $rnd_value .= sha1( $rnd_value );
        $rnd_value .= sha1( $rnd_value . $seed );
        $seed       = md5( $seed . $rnd_value );
        if ( ! defined( 'WP_SETUP_CONFIG' ) && ! defined( 'WP_INSTALLING' ) ) {
            set_transient( 'random_seed', $seed );
        }
    }
 
    // Take the first 8 digits for our value.
    $value = substr( $rnd_value, 0, 8 );
 
    // Strip the first eight, leaving the remainder for the next call to wp_rand().
    $rnd_value = substr( $rnd_value, 8 );
 
    $value = abs( hexdec( $value ) );
 
    // Reduce the value to be within the min - max range.
    if ( 0 != $max ) {
        $value = $min + ( $max - $min + 1 ) * $value / ( $max_random_number + 1 );
    }
 
    return abs( (int) $value );
}


使用举例:


$minval = 113241;
$maxVal = 999999;
$random_number = wp_rand( $minVal, $maxVal ); //生成 113241 - 999999 之间的随机数
$wpdocs_random_id = 'wpdocs-' . $random_number;

发表评论

暂无评论,抢个沙发...

客服 工单