Số ngẫu nhiên. Sử dụng hàm ngẫu nhiên PHP

Khởi tạo trình tạo số ngẫu nhiên. Cú pháp:

Khoảng trống (int hạt giống)

Khởi tạo trình tạo số ngẫu nhiên với giá trị hạt giống.

Srand((double) microtime()*1000000);
$ngẫu nhiên = rand();
tiếng vang $ ngẫu nhiên;

GETRANDMAX

Trả về số ngẫu nhiên lớn nhất có thể. Cú pháp:

Int getrandmax()

Hàm này trả về giá trị tối đa có thể thu được bằng hàm tạo số ngẫu nhiên rand().

Thông thường là 32767

Tạo ra một số ngẫu nhiên. Cú pháp:

Int rand()

Khi được gọi với các tham số tối thiểu và tối đa tùy chọn, hàm này sẽ tạo ra một số ngẫu nhiên tối đa và bao gồm các tham số đó. Nếu thiếu tham số tối thiểu và tối đa, một số nằm trong khoảng từ 0 đến RAND_MAX sẽ được trả về.

hoạt động chính xác Trước khi sử dụng hàm này, bạn cần khởi tạo trình tạo số ngẫu nhiên bằng hàm srand().

lcg_value()

Trình tạo số giả ngẫu nhiên LCG (PHP 4, PHP 5)

Sự miêu tả:

Float lcg_value (void)

lcg_value() trả về số giả ngẫu nhiên trong phạm vi (0, 1). Hàm kết hợp hai bộ tạo với 2^31 - 85 và 2^31 - 249 trong một khoảng thời gian.

mt_getrandmax()

Hiển thị giá trị ngẫu nhiên lớn nhất có thể (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Sự miêu tả:

Int mt_getrandmax (void)

Hiển thị giá trị tối đa có thể được trả về bởi mt_Rand()

mt_Rand()

Tạo giá trị ngẫu nhiên tốt nhất (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Sự miêu tả:

int mt_Rand()

Nhiều phiên bản cũ hơn của trình tạo số ngẫu nhiên có những đặc điểm đáng nghi ngờ và hoạt động chậm. Theo mặc định, PHP sử dụng hàm rand() để tạo số ngẫu nhiên. Hàm mt_Rand() là một sự thay thế tốt. Cô ấy dùng máy phát điện ngẫu nhiên số, nhanh gấp 4 lần rand() và sử dụng Mersenne Twister.

Được gọi mà không có đối số tối thiểu và tối đa tùy chọn, mt_Rand() trả về giá trị giả ngẫu nhiên nằm trong khoảng từ 0 đến RAND_MAX. Ví dụ: nếu bạn cần lấy các giá trị ngẫu nhiên trong khoảng từ 5 đến 15, hãy tìm mt_Rand (5, 15).

Ví dụ sử dụng mt_rand()

echo mt_rand() . "\N";
echo mt_rand() . "\N";

echo mt_rand(5, 15);
?>

Kết quả thực hiện ví dụ này sẽ có một cái gì đó như thế này:

1604716014
1478613278
6

Bình luận

Bình luận: Trong các phiên bản trước 3.0.7, tham số thứ hai của hàm chỉ định phạm vi số. Ví dụ: để lấy số ngẫu nhiên từ 5 đến 15 trong các phiên bản này, bạn cần chỉ định hàm mt_Rand(5, 11).

mt_srand()

Số lượt cài đặt giá trị ban đầu máy phát điện tốt nhất số ngẫu nhiên (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Sự miêu tả:

Vô hiệu mt_srand()

Đặt giá trị ban đầu của trình tạo số ngẫu nhiên bằng cách sử dụng hạt giống. Kể từ PHP 4.2.0, hạt giống là tùy chọn và cài đặt mặc định cho các giá trị ngẫu nhiên bị bỏ qua.

Ví dụ về sử dụng mt_srand()

// gieo hạt với micro giây
hàm make_seed()
{
list($usec, $sec) = phát nổ(" ", microtime());
trả về (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$randval = mt_rand();
?>

Bình luận: Kể từ PHP 4.2.0, không còn cần thiết phải khởi tạo trình tạo số ngẫu nhiên bằng srand() hoặc mt_srand() nữa vì việc này hiện được thực hiện tự động.

Nhiệm vụ
Bạn cần tạo một số ngẫu nhiên trong phạm vi số.

Giải pháp
Hàm mt_Rand() được thiết kế cho việc này:

// số ngẫu nhiên giữa $upper và $bottom, bao gồm
$random_number = mt_rand($low, $upper);

Cuộc thảo luận
Việc tạo số ngẫu nhiên rất hữu ích khi bạn cần hiển thị một hình ảnh ngẫu nhiên trên màn hình, ngẫu nhiên chỉ định điểm bắt đầu trong trò chơi, chọn nhập ngẫu nhiên từ cơ sở dữ liệu hoặc tạo định danh duy nhất phiên. Để tạo một số ngẫu nhiên trong khoảng giữa hai điểm, bạn cần truyền hai đối số cho hàm mt_Rand():

$random_number = mt_rand(1, 100);

Việc gọi mt_rand() không có đối số sẽ trả về một số từ 0 đến số ngẫu nhiên tối đa được trả về bởi mt_getrandmax(). Rất khó để máy tính tạo ra một số thực sự ngẫu nhiên. Anh ấy giỏi hơn nhiều trong việc làm theo hướng dẫn một cách có phương pháp và không giỏi lắm nếu bị yêu cầu hành động một cách tự phát. Nếu bạn cần buộc máy tính tạo ra một số ngẫu nhiên thì bạn cần phải cho nó bộ cụ thể các lệnh lặp đi lặp lại, trong khi chính tính lặp lại làm cho việc đạt được tính ngẫu nhiên ít có khả năng xảy ra hơn.

PHP có hai trình tạo số ngẫu nhiên khác nhau: hàm cổ điển có tên là rand() và hàm nâng cao hơn là mt_rand().

MT (Mersenne Twister) là một trình tạo số giả ngẫu nhiên được đặt theo tên của nhà sư và nhà toán học người Pháp Marin Mersenne, người đã nghiên cứu các số nguyên tố. Trên những cái này số nguyên tố và thuật toán của trình tạo này dựa trên. Hàm mt_rand() nhanh hơn hàm rand() và cung cấp nhiều hơn Số ngẫu nhiên, vì vậy chúng tôi ưu tiên cho cái đầu tiên trong số chúng.

Nếu bạn có phiên bản PHP cũ hơn 4.2 thì trước khi gọi hàm mt_rand() (hoặc rand()) lần đầu tiên, bạn cần khởi tạo trình tạo với giá trị ban đầu bằng cách gọi mt_srand() (hoặc srand( )) chức năng. Giá trị ban đầu là số hàm ngẫu nhiên sử dụng nó làm cơ sở để tạo ra các số ngẫu nhiên mà nó trả về; nó đề cập đến một cách giải quyết vấn đề nan giải nêu trên – tính lặp lại và tính ngẫu nhiên.

Vì giá trị ban đầu thay đổi rất nhanh và có xác suất lặp lại thấp (các thuộc tính này phải đặc trưng cho giá trị ban đầu tốt), bạn có thể lấy giá trị được trả về bởi hàm thời gian có độ chính xác cao microtime(). Chỉ cần khởi tạo máy phát điện một lần là đủ. PHP 4.2 trở lên phiên bản sau tự động xử lý việc khởi tạo, nhưng nếu giá trị ban đầu được đặt thủ công trước lệnh gọi đầu tiên tới mt_Rand(), PHP sẽ không thay thế nó bằng giá trị ban đầu của chính nó.

Nếu bạn cần chọn một bản ghi ngẫu nhiên từ cơ sở dữ liệu, cách dễ nhất trước tiên là xác định tổng số trường trong bảng, chọn một số ngẫu nhiên từ phạm vi đó, sau đó truy vấn hàng đó từ cơ sở dữ liệu:

$sth = $dbh->query("CHỌN ĐẾM(*) NHƯ đếm TỪ dấu ngoặc kép");
if ($row = $sth->fetchRow()) (
$count = $row;
) khác (
chết ($row->getMessage());
}
$random = mt_Rand(0, $count - 1);
$sth = $dbh->query("CHỌN trích dẫn TỪ dấu ngoặc kép GIỚI HẠN $ngẫu nhiên,1");
while ($row = $sth->fetchRow()) (
in $row .

"\N";
}

Đoạn mã này xác định tổng số hàng trong bảng, tạo một số ngẫu nhiên từ phạm vi đó và sau đó sử dụng LIMIT $random,1 để CHỌN một hàng từ bảng bắt đầu từ vị trí $random. Trong MySQL phiên bản 3.23 trở lên, có thể có một tùy chọn thay thế:

$sth = $dbh->query("CHỌN trích dẫn TỪ dấu ngoặc kép ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
in $row . "\N";
}

Trong trường hợp này, đầu tiên MySQL chọn ngẫu nhiên các hàng và sau đó trả về hàng đầu tiên.

Để tạo một số ngẫu nhiên, bạn có thể sử dụng hàm PHP rand() hoặc mt_Rand(). Yêu cầu sử dụng số ngẫu nhiên thường nảy sinh trong thực tế khi đặt tên biến, file, tạo thông tin key và đảm bảo tính bảo mật.

Tính ngẫu nhiên và duy nhất

Hàm ngẫu nhiên PHP có hai biến thể: rand() và mt_rand(). Người ta tin rằng thuật toán trong trường hợp đầu tiên đơn giản hơn và tạo ra các số giả ngẫu nhiên. Tùy chọn thứ hai có thuật toán nhanh hơn và các đặc tính toán học nổi tiếng. Trong hầu hết các trường hợp khi bạn cần lấy một số ngẫu nhiên, bạn có thể sử dụng một loạt lệnh gọi ngẫu nhiên PHP và nhận được một tổ hợp số duy nhất.

Nếu bạn lấy các số từ 1 đến 26 hoặc từ 1 đến 32 làm cơ sở và lấy ngẫu nhiên, bạn có thể hình thành Thông tin mấu chốt dưới dạng một chuỗi các chữ cái Latin hoặc Cyrillic. Trong trường hợp này, PHP ngẫu nhiên là một cách tạo ra một chuỗi thông tin theo thứ tự chữ cái, ví dụ như nhằm mục đích thử nghiệm các kênh truyền thông hoặc thuật toán.

Một số ngẫu nhiên hiếm khi là duy nhất vì nó có thể xuất hiện nhiều lần theo quy luật phân phối của một biến ngẫu nhiên. Nhưng nếu bạn kết hợp, đặc biệt, tĩnh Biến PHP&Toán.ngẫu nhiên Ngôn ngữ JavaScript, thì bạn có thể nhận được một số ngẫu nhiên thực sự duy nhất sẽ không lặp lại theo thời gian.

Sử dụng hàm thời gian

Hàm thời gian, cả PHP và JavaScript, cho phép bạn tạo các tổ hợp số duy nhất, hiếm khi có thể xảy ra đủ tại một thời điểm một số lượng lớn sự kiện và biến ngẫu nhiên sẽ lặp lại.

Bằng cách áp dụng ngẫu nhiên PHP trong phạm vi giây hoặc mili giây trên một phạm vi lớn các giá trị có thể, có thể thu được các kết hợp ngẫu nhiên duy nhất của các số hoặc chữ cái. Còn gì nữa?

Bằng cách kết hợp giá trị của hàm thời gian, số tăng tuần tự và PHP ngẫu nhiên hoặc bạn có thể đảm bảo tính bảo mật đáng tin cậy của các kênh liên lạc giữa máy khách và máy chủ, tạo mã duy nhấtđối với các biến, tạo ra các sự kiện không thể đoán trước trong thuật toán.

Trình tạo số ngẫu nhiên PHP là giải pháp tuyệt vời cho hầu hết các tác vụ, đặc biệt khi bạn cần nhanh chóng nhận được kết quả chất lượng cao với chi phí tối thiểu. Việc sử dụng hàm rand() và mt_Rand kết hợp với chuỗi số hoặc giá trị thời gian tăng dần theo tuần tự cho phép bạn thu được các số ngẫu nhiên, vừa lặp lại về giá trị vừa duy nhất.