Ví dụ
<?php
function generate_otp($n) {
$gen = "1357902468";
$res = "";
for ($i = 1; $i <= $n; $i++) {
$res .= substr($gen, rand() % strlen($gen), 1);
}
return $res;
}
$num = 8;
print_r("The one time password generated is: ");
print_r(generate_otp($num));
?>
Kết quả
The one time password generated is: 52471609
Giải thích
Hàm generate_otp($n) tạo OTP số độ dài $n. Chuỗi $gen chứa các chữ số 0-9 (thứ tự xáo trộn). Vòng lặp $n lần, mỗi lần lấy 1 ký tự ngẫu nhiên từ $gen bằng substr($gen, rand() % strlen($gen), 1) và nối vào kết quả.
Vấn đề bảo mật: rand() KHÔNG an toàn mật mã (dự đoán được). Đối với OTP thực tế, phải dùng random_int(0, 9) hoặc random_bytes().
Phiên bản an toàn (PHP 7+):
function generate_otp_secure($n) {
$res = '';
for ($i = 0; $i < $n; $i++) {
$res .= random_int(0, 9);
}
return $res;
}