Zufallszahl im Bereich [min – max] mit PHP

Lesezeit: 4 Minuten

Benutzer-Avatar
Val

Gibt es eine Möglichkeit, eine Zufallszahl basierend auf einem Minimum und einem Maximum zu generieren?

Wenn beispielsweise min 1 und max 20 war, sollte es eine beliebige Zahl zwischen 1 und 20 generieren, einschließlich 1 und 20?

  • Neue PHP-Version hat einen kryptografisch sicheren Zufallszahlengenerator.

    – Salvador Dalí

    15. Juli 2015 um 3:47 Uhr

  • Für die Verwendung von PHP 7+ random_int(), random_bytes()oder openssl_random_pseudo_bytes() . wie @Salvador Dali sagte rand() erzeugen keine kryptografisch sicheren Ergebnisse. Siehe Dokumentation php.net/manual/en/function.rand.php

    – Gefrorenes Feuer

    23. Januar 2016 um 8:56 Uhr


<?php
  $min=1;
  $max=20;
  echo rand($min,$max);
?>

  • Ich dachte, dass Min und Max für Rand die Anzahl der Ziffern sind, die anstelle von Zahlen verwendet werden 🙂 thnx

    – Val

    13. November 2010 um 17:50 Uhr

  • Verwandte: wenn PHP_INT_MAX < ($max-$min)müssen Sie Intervalle addieren, wie in dieser Antwort beschrieben.

    – Bischof

    10. Juli 2015 um 16:12 Uhr


  • rand() vor PHP7.1 ist einfach schlecht. Es verwendet den LCG-Algorithmus, der zu einer vorhersagbaren Ausgabe führt. Es ist auch langsam. Seit PHP7.1 ist rand() ein Alias ​​von mt_rand() und daher nicht mehr schlecht. PHP7 hat auch kryptografisch sicheres random_int() eingeführt, es sollte jedoch vermieden werden, sofern es nicht unbedingt erforderlich ist, da es viel langsamer als mt_rand() ist.

    – xNull

    13. Dezember 2018 um 9:17 Uhr

In einem neuen PHP7 es gibt endlich eine Unterstützung für a kryptografisch sichere Pseudozufallszahlen.

int random_int ( int $min , int $max )

random_int — Erzeugt kryptografisch sichere Pseudozufallszahlen

was frühere Antworten im Grunde obsolet macht.

  • Das ist großartig! Aber bis Webhoster PHP7 globaler unterstützen, ist dies leider für niemanden nützlich, der Produkte für den Vertrieb entwickelt. Die vorherigen Antworten, die AUCH auf PHP7 funktionieren, sind also immer noch Best Practice.

    – Matt Cromwell

    3. November 2016 um 18:32 Uhr

  • @MattCromwell. Ich stimme dir nicht zu. Bis Hosting-Dienste PHP7 unterstützen, sollten wir Polyfill verwenden random_int und random_bytes Funktion – github.com/paragonie/random_compat.

    – Vladimir Posvistelik

    8. Januar 2017 um 19:41 Uhr

  • Ich bin neugierig, gibt es überhaupt einen Grund, es NICHT zu verwenden random_int ? Wenn es “bessere” Zufallszahlen liefert, warum nicht aus nicht-kryptotechnischen Gründen verwenden?

    – Brian Leishmann

    21. September 2017 um 16:13 Uhr

  • @BrianLeishman Ich würde es lieber für alles verwenden. Der einzige Nachteil, den ich erraten kann: Es hängt wahrscheinlich von der Quelle der Zufälligkeit ab und kann fehlschlagen, wenn Sie keine Zufälligkeit mehr haben. Es könnte teurer sein (muss überprüft werden), aber ich bezweifle, dass diese eine Funktion einen großen Unterschied macht

    – Salvador Dalí

    21. September 2017 um 17:54 Uhr

  • Ich weiß, dass es langsamer ist, aber es ist unbedeutend genug, um nicht zurückzugehen und bereits vorhandene zu ändern random_ints zu rands. Außerdem ist mein Anwendungsfall ein Wiederholungsalgorithmus, und ich möchte definitiv nicht, dass mehrere fehlgeschlagene Funktionen nach dem Schlafen wegen vorhersehbarer zufälliger Ints verklumpen

    – Brian Leishmann

    21. September 2017 um 18:18 Uhr

Benutzer-Avatar
Matt Cromwell

EIN schneller schnellere Version würde mt_rand verwenden:

$min=1;
$max=20;
echo mt_rand($min,$max);

Quelle: http://www.php.net/manual/en/function.mt-rand.php.

HINWEIS: Damit dies funktioniert, muss auf Ihrem Server das Math-PHP-Modul aktiviert sein. Wenn dies nicht der Fall ist, buggen Sie Ihren Host, um es zu aktivieren, oder Sie müssen das normale (und langsamere) rand() verwenden.

  • du meinst schneller oder? der unterschied ist (tippen==schneller vs schneller==leistungsmäßig)

    – Val

    11. Februar 2014 um 11:16 Uhr


  • english.stackexchange.com/questions/31732/… – kann eigentlich beides sein

    – pinkeln

    2. Juni 2020 um 17:55 Uhr

Ich habe die Antworten hier gebündelt und versionunabhängig gemacht;

function generateRandom($min = 1, $max = 20) {
    if (function_exists('random_int')):
        return random_int($min, $max); // more secure
    elseif (function_exists('mt_rand')):
        return mt_rand($min, $max); // faster
    endif;
    return rand($min, $max); // old
}

(rand() % ($max-$min)) + $min

oder

rand ( $min , $max )

http://php.net/manual/en/function.rand.php

Benutzer-Avatar
winken

rand(1,20)

Docs für die rand-Funktion von PHP sind hier:

http://php.net/manual/en/function.rand.php

Verwenden Sie die srand() -Funktion, um den Seed-Wert des Zufallszahlengenerators festzulegen.

Benutzer-Avatar
asi_x

Probier diese. Es wird eine ID nach Ihrem Wunsch generieren.

function id()
{
 // add limit
$id_length = 20;

// add any character / digit
$alfa = "abcdefghijklmnopqrstuvwxyz1234567890";
$token = "";
for($i = 1; $i < $id_length; $i ++) {

  // generate randomly within given character/digits
  @$token .= $alfa[rand(1, strlen($alfa))];

}    
return $token;
}

1354080cookie-checkZufallszahl im Bereich [min – max] mit PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy