wp_rand() – Generates a random non-negative number.

You appear to be a bot. Output may be restricted

Description

Generates a random non-negative number.

Usage

$int = wp_rand( $min, $max );

Parameters

$min
( int ) optional – Optional. Lower limit for the generated number. Accepts positive integers or zero. Defaults to 0.
$max
( int ) optional – Optional. Upper limit for the generated number. Accepts positive integers. Defaults to 4294967295.

Returns

int A random non-negative number between min and max.

Source

File name: wordpress/wp-includes/pluggable.php
Lines:

1 to 69 of 69
  function wp_rand( $min = null, $max = null ) {
    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

    if ( null === $min ) {
      $min = 0;
    }

    if ( null === $max ) {
      $max = $max_random_number;
    }

    // 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 {
        // 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.
    $value = $min + ( $max - $min + 1 ) * $value / ( $max_random_number + 1 );

    return abs( (int) $value );
  }
 

 View on GitHub View on Trac