Hướng dẫn dùng shuffle characters trong PHP

Việc tạo ra các chuỗi ngẫu nhiên 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 những số và chuỗi không tuân theo một pattern[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ự chữ ngẫu nhiên trong PHP. Một số trong số 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, như gán tên file giả ngẫu nhiên hoặc tạo URL và đề xuất username[tên người dùng].

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

Có ba hàm khác nhau để tạo số ngẫu nhiên trong PHP. Tất cả các hàm đó sẽ nhận một giá trị tối thiểu và 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. Đó là

187 3276 1267 15 1267 34598 3467 125 17
93,
187 3276 1267 15 1267 34598 3467 125 17
94 và
187 3276 1267 15 1267 34598 3467 125 17
95.

Với

187 3276 1267 15 1267 34598 3467 125 17
96, giá trị tối thiểu và tối đa của các integer [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ả về bởi
187 3276 1267 15 1267 34598 3467 125 17
98. Trước khi có PHP 7.1.0, hàm này chậm hơn khoảng bốn lần so với
187 3276 1267 15 1267 34598 3467 125 17
99. Tuy nhiên, bắt đầu từ PHP 7.1.0, nó đã thành một alias của
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, các giá trị tối thiểu và tối đa của integer 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 triển khai của Mersenne Twister để tạo ra các số ngẫu nhiên. Xem ra, mặc dù trước khi có PHP 7.1.0, hàm này đã triển khai một 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 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 với một số seed 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ố code 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 số ngẫu nhiên 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ó đượ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à chính chuỗi đó đã 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ể có cùng 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ể!

Số nguyên ngẫu nhiên được mã hóa an toàn

Nếu bạn muốn các số pseudo [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 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 may, hàm này chỉ có bắt đầu hỗ trợ từ 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 integer 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ả về 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

Chủ Đề