PHP如何生成指定范围的70位超大随机数 解决随机函数报错问题
问题原因分析
- 第一版代码报错是因为
rand()、mt_rand()等PHP原生随机函数仅支持原生int类型参数,无法识别GMP对象,直接传GMP对象必然触发类型错误。 - 第二版代码报错有两个原因:
- 直接书写超大整数字面量时,PHP会自动将超出int范围的数字转为浮点数,精度丢失后无法被GMP正常解析
- 代码存在语法错误,参数结尾的右括号被误写为
>
正确实现代码
<?php // 上下限全部使用字符串形式传递,避免PHP整数字面量溢出 $min = '1000000000000000000000000000000000000000000000000000000000000000000000'; $max = '9000000000000000000000000000000000000000000000000000000000000000000000'; // 直接传入字符串参数即可,GMP会自动解析 $random_num = gmp_random_range($min, $max); // 输出时将GMP对象转为字符串 echo gmp_strval($random_num); ?>
注意事项
- 所有超出PHP原生int范围的数字,和GMP交互时必须使用字符串形式传递,禁止直接书写裸数字
- 生成的GMP对象不能直接输出,必须调用
gmp_strval()转为字符串后再打印
内容的提问来源于stack exchange,提问作者thebest man
相关产品推荐
相关产品推荐

