Điều này sẽ cung cấp cho bạn một chuỗi 8 ký tự ngẫu nhiên:
substr(str_pad(dechex(mt_rand()), 8, '0', STR_PAD_LEFT), -8);
Tìm thấy tại đây: http://www.richardlord.net/blog/php-password- bảo mật
Hoặc nếu trường tên người dùng là duy nhất, bạn cũng có thể sử dụng:
substr(md5('username value'), 0, 8);
Mặc dù nó cực kỳ khó xảy ra, đặc biệt là đối với md5, không có trường hợp nào đảm bảo một chuỗi duy nhất, vì vậy tôi có thể sẽ làm điều gì đó như sau:
// Handle user registration or whatever...
function generatePID($sUsername) {
return substr(md5($sUsername), 0, 8);
}
$bUnique = false;
$iAttempts = 0;
while (!$bUnique && $iAttempts < 10) {
$aCheck = $oDB->findByPID(generatePID("username value")); // Query the database for a PID matching whats generated
if (!$aCheck) { // If nothing is found, exit the loop
$bUnique = true;
} else {
$iAttempts++;
}
}
// Save PID and such...
... mà có thể sẽ chỉ mang lại 1 truy vấn 'kiểm tra', có thể là 2 trong các trường hợp duy nhất và sẽ đảm bảo một chuỗi duy nhất.