RandomGenerator.php 800 B

12345678910111213141516171819202122232425262728293031323334
  1. <?php
  2. namespace Stripe\Util;
  3. /**
  4. * A basic random generator. This is in a separate class so we the generator
  5. * can be injected as a dependency and replaced with a mock in tests.
  6. */
  7. class RandomGenerator
  8. {
  9. /**
  10. * Returns a random value between 0 and $max.
  11. *
  12. * @param float $max (optional)
  13. * @return float
  14. */
  15. public function randFloat($max = 1.0)
  16. {
  17. return mt_rand() / mt_getrandmax() * $max;
  18. }
  19. /**
  20. * Returns a v4 UUID.
  21. *
  22. * @return string
  23. */
  24. public function uuid()
  25. {
  26. $arr = array_values(unpack('N1a/n4b/N1c', openssl_random_pseudo_bytes(16)));
  27. $arr[2] = ($arr[2] & 0x0fff) | 0x4000;
  28. $arr[3] = ($arr[3] & 0x3fff) | 0x8000;
  29. return vsprintf('%08x-%04x-%04x-%04x-%04x%08x', $arr);
  30. }
  31. }