在PHP中生成随机的字母数字字符串

首先,让我说几乎没有事件是真正随机的。 如果我们知道所涉及的每个因素(例如空气摩擦,重力和初始力)的影响,那么即使从理论上讲,经典的抛硬币的结果也可以预测。

同样的情况适用于随机数和字母数字字符串的生成。 我们可以期望的最好的办法是生成似乎不遵循某种模式并且实际上无法被攻击者预测的数字和字符串。

在本教程中,我们将介绍在PHP中生成随机数和字母数字字符串的不同技术。 其中一些将是加密安全的,而另一些则仅用于临时使用,例如分配伪随机文件名或创建URL并建议用户名。

在PHP中生成随机数

在PHP中,可以使用三种不同的函数来生成随机数。 它们都将接受随机数的最小和最大值,并为您输出一个随机数。 这些是rand($min, $max)mt_rand($min, $max)random_int($min, $max)

使用rand() ,您可以生成的整数的最小值和最大值在0getrandmax()返回的值之间。 在PHP 7.1.0之前,此功能比mt_rand()慢大约四倍。 但是,从PHP 7.1.0开始,它已成为mt_rand()的别名。 但是,与mt_rand()不同,您可以将$max的值设置为小于$min而不引起错误。

使用mt_rand() ,可以生成的整数的最小值和最大值介于0mt_getrandmax()返回的值之间。 它依靠Mersenne Twister的实现来生成随机数。 但是请注意,在PHP 7.1.0之前,此函数实现了错误版本的算法来生成数字。 但是,它已在较新版本中修复。

通过消除模块偏差错误,该功能在PHP 7.2.0中变得更好。 这意味着对于某些特定的种子,您的随机数序列现在将比旧版本更好。 但是,某些专用代码实际上可能依赖于这种偏见。 如果是这样,则可以通过调用mt_srand()函数为随机数生成器作为种子并将MT_RAND_PHP用作第二个参数的值来使用较早的种子算法。

mt_rand()函数的周期为2 19937 -1,这基本上意味着,在最佳情况下,在序列开始重复之前,您将获得2 19937

你可能感兴趣的:(字符串,算法,python,java,php)