Tên ngẫu nhiên php

Generate a random 5 character A-Z0-9  string

for ($i=0; $i<6; $i++) {
    $d=rand(1,30)%2;
    echo $d ? chr(rand(65,90)) : chr(rand(48,57));
}
?>

# php -r 'for ($i=0; $i<6; $i++) { $d=rand(1,30)%2; echo $d ? chr(rand(65,90)) : chr(rand(48,57)); } echo "\n";'
14BW1A

Việc tạo ra các chuỗi ngẫu nhiên bao gồm chữ và số cũng có nguyên tắc tương tự. Điều tốt đẹp nhất có thể chờ đợi là tạo ra các số và chuỗi không tuân theo một khuôn mẫu (hình mẫu) và một kẻ tấn công về thực tiễn sẽ không thể đoán ra

Trong hướng dẫn này, chúng tôi sẽ đề cập đến các kỹ thuật khác nhau để tạo số và chuỗi ký tự ngẫu nhiên trong PHP. Một số trong chúng sẽ được mã hóa, trong khi một số khác chỉ dành cho nhu cầu thông thường, chẳng hạn như gán tên tệp giả ngẫu nhiên hoặc tạo URL và tên người dùng xuất (tên người dùng)

Tạo các số ngẫu nhiên trong PHP

Có ba hàm khác nhau để tạo ngẫu nhiên số trong PHP. Tất cả các hàm sẽ nhận một giá trị tối thiểu và tối đa tối đa có thể cho các số ngẫu nhiên và trả về một số ngẫu nhiên cho bạn. That is

187 3276 1267 15 1267 34598 3467 125 17
93,
187 3276 1267 15 1267 34598 3467 125 17
94 and
187 3276 1267 15 1267 34598 3467 125 17
95

With

187 3276 1267 15 1267 34598 3467 125 17
96, giá trị tối thiểu và tối đa tối thiểu của các số nguyên (số nguyên) mà bạn có thể tạo nằm giữa
187 3276 1267 15 1267 34598 3467 125 17
97 và giá trị được trả lại bởi ________0____98. Trước khi có PHP 7. 1. 0, this function slow more than offset times so with
187 3276 1267 15 1267 34598 3467 125 17
99. Tuy nhiên, bắt đầu từ PHP 7. 1. 0, it has to a alias of
187 3276 1267 15 1267 34598 3467 125 17
99. Tuy nhiên, không giống như
187 3276 1267 15 1267 34598 3467 125 17
99, bạn có thể đặt giá trị của
1
02 thấp hơn
1
03 mà không gây ra lỗi

Với

187 3276 1267 15 1267 34598 3467 125 17
99, giá trị tối thiểu và tối đa tối thiểu của số nguyên bạn có thể tạo nằm giữa
187 3276 1267 15 1267 34598 3467 125 17
97 và giá trị được trả về bởi
1
06. Nó dựa vào sự phát triển của Mersenne Twister để tạo ra các ngẫu nhiên số. Xem ra, mặc định trước khi có PHP 7. 1. 0, this function has been development a phiên bản thuật toán không chính xác để tạo ra các số. Tuy nhiên, hàm này đã được sửa đổi trong các phiên bản mới hơn

Hàm này thậm chí còn trở nên tốt hơn trong PHP 7. 2. 0 bằng cách loại bỏ lỗi modulo. Điều này có nghĩa là đối lập với một số hạt giống cụ thể, chuỗi số ngẫu nhiên của bạn bây giờ sẽ tốt hơn một chút so với các phiên bản cũ hơn. Măc dù một số mã chuyên dụng thực sự có thể dựa vào khuynh hướng này. Nếu vậy, bạn có thể sử dụng thuật toán seed cũ hơn bằng cách gọi hàm

1
07 để seed trình tạo ngẫu nhiên số và truyền
1
08 làm giá trị của tham số thứ hai

Hàm

187 3276 1267 15 1267 34598 3467 125 17
99 có chu kỳ 219937−1, về cơ bản có nghĩa là trong trường hợp tốt nhất bạn có số lượng ngẫu nhiên 219937−1 trước khi chuỗi bắt đầu lặp lại. Bạn nên lưu ý rằng việc lặp lại một chuỗi không giống như việc lặp lại một số cụ thể. Nói cách khác, bạn có thể nhận được cùng một số ngẫu nhiên hai lần, nhưng điều đó không có nghĩa là chuỗi chính đã bắt đầu lặp lại. Trình tự sau đây là một ví dụ

1
187 3276 1267 15 1267 34598 3467 125 17

Trong chuỗi trên, chúng tôi đã có 1267 hai lần trong kết quả, nhưng điều đó không có nghĩa là toàn bộ chuỗi bắt đầu lặp lại sau đó. Không thể lặp lại một số lặp lại sớm như vậy trong một chuỗi ngẫu nhiên, nhưng điều đó có thể

Random number has been wholeized code

Nếu bạn muốn các số giả (giả) ngẫu nhiên được bảo mật bằng mã hóa, hàm

1
10 trong PHP là lựa chọn tốt nhất của bạn. Nó sẽ tạo ra các số ngẫu nhiên giữa các giá trị
1
03 và
1
02 được cung cấp, mặc định là
1
13 và
1
14. Thật không thể, this function only start support from PHP 7. 0. Đối với các phiên bản trước đó, bạn có thể sử dụng polyfill này trên GitHub

Các số float ngẫu nhiên

Thay vì tạo số nguyên ngẫu nhiên, có thể bạn cũng muốn tạo số float. Điều này có thể được thực hiện dễ dàng bằng cách chia một số ngẫu nhiên với giá trị được trả lại bởi

1
06. Ví dụ sau đây sẽ minh họa cách tạo ra một số float ngẫu nhiên trong khoảng từ 0 đến 1 hoặc giữa bất kỳ giới hạn tối thiểu và tối đa nào khác

1

2
3
// Output: 0.69458310943776

4
echo mt_rand(0, mt_getrandmax())/mt_getrandmax();
5
187 3276 1267 15 1267 34598 3467 125 17
0
187 3276 1267 15 1267 34598 3467 125 17
1
187 3276 1267 15 1267 34598 3467 125 17
2
187 3276 1267 15 1267 34598 3467 125 17
3
187 3276 1267 15 1267 34598 3467 125 17
4
187 3276 1267 15 1267 34598 3467 125 17
5
187 3276 1267 15 1267 34598 3467 125 17
6
187 3276 1267 15 1267 34598 3467 125 17
7
187 3276 1267 15 1267 34598 3467 125 17
8
187 3276 1267 15 1267 34598 3467 125 17
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9

0

1

2

Khi tạo số float ngẫu nhiên giữa các giới hạn nhất định, chúng tôi chắc chắn rằng các số nguyên ngẫu nhiên không vượt quá

1
16. Bằng cách này, chúng tôi có thể chắc chắn rằng việc sử dụng thêm phần float sẽ không lấy số vượt quá giới hạn tối đa

Seed for Natural Random Number

Một khái niệm cần một chút giải thích là hạt giống. Nói một cách đơn giản, đây chỉ là những số có thể được sử dụng để khởi tạo các hàm

187 3276 1267 15 1267 34598 3467 125 17
96 và
187 3276 1267 15 1267 34598 3467 125 17
99 trước khi tạo bất kỳ số ngẫu nhiên nào. Hàm mà seed
187 3276 1267 15 1267 34598 3467 125 17
96 được gọi là
1
20 và hàm tạo seed
187 3276 1267 15 1267 34598 3467 125 17
99 được gọi là
1
22

Điều quan trọng cần nhớ là việc cung cấp một giá trị ban đầu mỗi lần trước khi gọi

187 3276 1267 15 1267 34598 3467 125 17
96 và
187 3276 1267 15 1267 34598 3467 125 17
99 sẽ không nhất thiết phải tạo ra các số ngẫu nhiên tốt hơn. Trong thực tế, việc sử dụng cùng một hạt giống mỗi lần sẽ cho bạn cùng một số ngẫu nhiên

1

2
3

7
4

9
5
2
1
187 3276 1267 15 1267 34598 3467 125 17
0
187 3276 1267 15 1267 34598 3467 125 17
2

7
187 3276 1267 15 1267 34598 3467 125 17
4

9
187 3276 1267 15 1267 34598 3467 125 17
6
2
1
187 3276 1267 15 1267 34598 3467 125 17
8
1
0

7
1
1

9
1
3
2
1
1
5
1
6

2

Seed một số ngẫu nhiên rất hữu ích trong các tình huống mà bạn muốn tạo một chuỗi ngẫu nhiên nhưng có thể lặp lại. Đoạn mã sau được tạo ra cùng một chuỗi các số ngẫu nhiên khi chạy hai lần

1

2
3

7
4
5
// Output: 0.69458310943776

6
187 3276 1267 15 1267 34598 3467 125 17
0
187 3276 1267 15 1267 34598 3467 125 17
2
// Output: 0.69458310943776

9
187 3276 1267 15 1267 34598 3467 125 17
4
4
1
187 3276 1267 15 1267 34598 3467 125 17
6
4
3
187 3276 1267 15 1267 34598 3467 125 17
8
187 3276 1267 15 1267 34598 3467 125 17
9
1
0
1
1
4
8
1
3
echo mt_rand(0, mt_getrandmax())/mt_getrandmax();
0
1
5
1
6
echo mt_rand(0, mt_getrandmax())/mt_getrandmax();
3
1
8
echo mt_rand(0, mt_getrandmax())/mt_getrandmax();
5

Việc tạo các chuỗi ngẫu nhiên có thể lặp lại theo cách này có thể giúp loại bỏ lỗi các chương trình đang được thử nghiệm bằng cách sử dụng dữ liệu ngẫu nhiên nếu bạn theo dõi hạt giống, bạn có thể sao chép cùng một dữ liệu đầu vào

Tạo chuỗi ký tự ngẫu nhiên trong PHP

Có nhiều cách để tạo chuỗi ký tự chữ cái và số ngẫu nhiên và bạn sử dụng cái gì thì sẽ phụ thuộc vào nhu cầu của bạn

Tạo các chuỗi hỗn hợp

Nếu bạn muốn tạo các chuỗi ký tự chữ và số ngẫu nhiên từ một bộ ký tự cố định, bạn có thể sử dụng hàm

1
25. Hàm này sẽ trả về cho bạn một chuỗi hỗn hợp ngẫu nhiên. Bắt đầu từ PHP 7. 1, thuật toán xác định thứ tự ngẫu nhiên của các ký tự trong chuỗi kết quả đã được thay đổi thành Mersenne Twister

Hãy nhớ rằng chuỗi ngẫu nhiên được tạo theo cách này không an toàn về mặt bảo mật mã hóa. Tuy nhiên, string vẫn sẽ không thể đoán trước được khi nhu cầu sử dụng phổ biến như tạo tên tệp hoặc URL ngẫu nhiên. Đây là một vài ví dụ

1

2
3
5
0
4
5
2_______32_______32_______4
187 3276 1267 15 1267 34598 3467 125 17
0
187 3276 1267 15 1267 34598 3467 125 17
2
5
7
187 3276 1267 15 1267 34598 3467 125 17
4
5
9
187 3276 1267 15 1267 34598 3467 125 17
6
187 3276 1267 15 1267 34598 3467 125 17
01
187 3276 1267 15 1267 34598 3467 125 17
8
1
0

2

Kết quả của bạn có thể sẽ khác nhau trong cả hai trường hợp. Trong trường hợp đầu tiên, chúng tôi chỉ xáo trộn chuỗi ký tự được phép và sau đó lấy 10 ký tự đầu tiên của chuỗi đó. Trong trường hợp thứ hai, chúng tôi đã thêm "video" vào chuỗi đầu được tạo và ". mp4" ở cuối

Phương pháp tạo chuỗi ký tự chữ cái và số ngẫu nhiên này rất dễ dàng, nhưng gặp phải một số vấn đề. Ví dụ. bạn sẽ không bao giờ có được các ký tự giống nhau trong chuỗi ngẫu nhiên của mình hai lần. Ngoài ra, độ dài của chuỗi kết quả ngẫu nhiên chỉ có thể dài bằng chuỗi nhập vào

Create Random string

Nếu các vấn đề tôi liệt kê ở trên là một tác nhân làm hỏng vấn đề, bạn có thể muốn xem xét một số khai thác khác. Các mã sau đây sẽ giải quyết cả hai vấn đề này

1

2
3
5
7
4
5
187 3276 1267 15 1267 34598 3467 125 17
12
187 3276 1267 15 1267 34598 3467 125 17
0
187 3276 1267 15 1267 34598 3467 125 17
14
187 3276 1267 15 1267 34598 3467 125 17
2
187 3276 1267 15 1267 34598 3467 125 17
16
187 3276 1267 15 1267 34598 3467 125 17
4
187 3276 1267 15 1267 34598 3467 125 17
18
187 3276 1267 15 1267 34598 3467 125 17
6
187 3276 1267 15 1267 34598 3467 125 17
20
187 3276 1267 15 1267 34598 3467 125 17
8
187 3276 1267 15 1267 34598 3467 125 17
22
1
0
187 3276 1267 15 1267 34598 3467 125 17
24
1
1
1
3
187 3276 1267 15 1267 34598 3467 125 17
27
1
5
187 3276 1267 15 1267 34598 3467 125 17
9
1
6
1
8
187 3276 1267 15 1267 34598 3467 125 17
32

0
187 3276 1267 15 1267 34598 3467 125 17
34

1
187 3276 1267 15 1267 34598 3467 125 17
36
187 3276 1267 15 1267 34598 3467 125 17
37
187 3276 1267 15 1267 34598 3467 125 17
38
187 3276 1267 15 1267 34598 3467 125 17
34
187 3276 1267 15 1267 34598 3467 125 17
40
187 3276 1267 15 1267 34598 3467 125 17
41
187 3276 1267 15 1267 34598 3467 125 17
42
187 3276 1267 15 1267 34598 3467 125 17
43
187 3276 1267 15 1267 34598 3467 125 17
44
187 3276 1267 15 1267 34598 3467 125 17
45
187 3276 1267 15 1267 34598 3467 125 17
46

2

Bạn có thể sửa đổi nó để bổ sung các công cụ tiền tố và tiền tố có thể vào chuỗi ngẫu nhiên vừa được tạo. Những người đang sử dụng PHP 7 có thể cải thiện tốt hơn nữa việc tạo chuỗi bằng cách sử dụng hàm bảo mật mã hóa

1
10 thay vì
187 3276 1267 15 1267 34598 3467 125 17
99

Tạo chuỗi thập lục phân (thập lục phân) ngẫu nhiên

Nếu bạn muốn tạo các chuỗi thập lục phân ngẫu nhiên trong PHP, bạn cũng có thể sử dụng hàm

1
28 hoặc hàm
1
29. Cả hai sẽ tạo ra hàm băm của một chuỗi đã nhập

Bạn sẽ tiếp tục nhận được giá trị băm duy nhất miễn phí là dữ liệu vào duy nhất. Điều này có thể đạt được bằng cách sử dụng kết quả của hàm như

1
30 làm dữ liệu nhập vào. Theo mặc định,
1
31 sẽ trả về chuỗi thập lục phân 32 ký tự và
1
32 sẽ trả về chuỗi thập lục phân 40 ký tự. Chúng có thể được cắt theo một độ dài cụ thể bằng cách sử dụng hàm
1
33

Dưới đây là một ví dụ kết quả được trả về bởi các hàm này

1

2
3
187 3276 1267 15 1267 34598 3467 125 17
52
4
187 3276 1267 15 1267 34598 3467 125 17
54
5
0_______0
187 3276 1267 15 1267 34598 3467 125 17
57
187 3276 1267 15 1267 34598 3467 125 17
2
187 3276 1267 15 1267 34598 3467 125 17
59
187 3276 1267 15 1267 34598 3467 125 17
4
187 3276 1267 15 1267 34598 3467 125 17
6
187 3276 1267 15 1267 34598 3467 125 17
62
187 3276 1267 15 1267 34598 3467 125 17
8
187 3276 1267 15 1267 34598 3467 125 17
64
1
0
1
1_______0_______67_______9_______3_______0__6__2

Như bạn có thể thấy, việc tạo các chuỗi thập lục phân ngẫu nhiên và duy nhất dài tới 40 ký tự rất dễ dàng trong PHP

Tạo chuỗi ngẫu nhiên có bảo mật mã hóa

Ba hàm để tạo các chuỗi ký tự chữ cái và số ngẫu nhiên mà chúng ta đã thảo luận cho đến nay không có bảo mật mã hóa. May mắn thay, PHP cũng có một hàm

1
34 để tạo các byte giả ngẫu nhiên được bảo mật mã hóa. Tham số
1
35 xác định chuỗi kết quả sẽ dài bao nhiêu

Khi bạn có kết quả dưới dạng byte ngẫu nhiên, bạn có thể sử dụng hàm

1
36 để chuyển chúng thành giá trị thập lục phân. Điều này sẽ làm tăng gấp đôi chiều dài của chuỗi

________9____26_______

2
3
187 3276 1267 15 1267 34598 3467 125 17
77
4
187 3276 1267 15 1267 34598 3467 125 17
79
187 3276 1267 15 1267 34598 3467 125 17
0_______82
187 3276 1267 15 1267 34598 3467 125 17
2
187 3276 1267 15 1267 34598 3467 125 17
84
187 3276 1267 15 1267 34598 3467 125 17
4
187 3276 1267 15 1267 34598 3467 125 17
6
187 3276 1267 15 1267 34598 3467 125 17
87
187 3276 1267 15 1267 34598 3467 125 17
8
187 3276 1267 15 1267 34598 3467 125 17
89
1
0
1
1_______26_______2

Một chức năng khác mà bạn có thể sử dụng để tạo các byte ngẫu nhiên được bảo mật mã hóa là

1
37. Giá trị của tham số thứ hai có thể được sử dụng để xác định việc xem kết quả chuỗi sẽ được tạo bằng thuật toán bảo mật mã hóa hay không

Tổng kết

Trong hướng dẫn này, chúng tôi đã xem xét việc tạo ra các số và các chuỗi ký tự ngẫu nhiên trong PHP. Việc tạo ra các số ngẫu nhiên có thể hữu ích trong nhiều vấn đề, chẳng hạn như trong các trò chơi mà bạn phải tạo ra những kẻ thù hoặc ngẫu nhiên cung cấp cho người chơi một số mối quan hệ về các chữ cái để họ có thể tạo thành

Cũng giống như các số ngẫu nhiên, việc tạo ra các chuỗi chữ và số ngẫu nhiên cũng có thể khá hữu ích trong nhiều trường hợp. Với sự trợ giúp của

1
38, bạn có thể chọn bất kỳ bộ ký tự nào xuất hiện trong chuỗi ngẫu nhiên của mình. Với sha1() và md5(), bạn có thể dễ dàng tạo các chuỗi thập lục phân ngẫu nhiên và với Random_bytes(), bạn có thể tạo các chuỗi bảo mật bằng mã mật. Điều này sẽ cho phép bạn tạo tên tệp và tên người dùng ngẫu nhiên nhưng khó đoán