Không sử dụng thêm entropy, uniqid
về cơ bản thực hiện như sau (xem nguồn của uniqid.c
):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
Vì vậy, về cơ bản nó lấy thời gian hiện tại tính bằng micro giây và biến chúng thành một biểu diễn thập lục phân và gắn nó vào tiền tố. Điều này đã cung cấp các giá trị duy nhất.
Nhưng các giá trị không hoàn toàn ngẫu nhiên. Để nhận được nhiều giá trị ngẫu nhiên hơn, bạn nên thêm nhiều entropy hơn bằng cách đặt tham số thứ hai more_entropy . Trong trường hợp đó, trình tạo đồng dư tuyến tính
nội bộ của PHP php_combined_lcg
(xem nguồn của lgc.c
) được sử dụng để tạo một số giả ngẫu nhiên được đính kèm ở cuối, thêm khoảng 30 bit entropy bổ sung để làm cho chúng trở nên ngẫu nhiên hơn.