2011-11-08 31 views
8

Tôi có một số nhận dạng duy nhất cho khách hàng mà tôi tạo ra mỗi lần một yêu cầu khách hàng hỗ trợ dịch vụ.Mã định danh duy nhất của php cho khách hàng

lần id là tạo ra, id được chèn vào trong cơ sở dữ liệu

đây mã của tôi:

function makeUnique() { 
$start_time = uniqid(microtime(1)); 
$duration = sprintf('%0.24f', $start_time); 
return date('dmYHis').$duration; 
} 

echo makeUnique(); 

sản lượng này: 071120112032291320715949.928639888763427734375000

đối với một số lý do tôi nhận 071120112032291320715949 như số lượng. tôi đang làm gì vậy?

Trả lời

6

bạn cần xóa "." (dấu chấm) trong hàm của bạn. bạn có thể sử dụng INT để xóa số sau dấu chấm.

return str_replace('.', '', date('dmYHis').$duration);

và chắc chắn rằng lĩnh vực này là đủ lớn - như varchar (50)

đề nghị của tôi sẽ chỉ đơn giản là băm id khách hàng sử dụng md5

md5($clientid)

và bạn có trường mysql dưới dạng char (32)

+0

là md5 tốt để sử dụng? –

+2

vui lòng đọc phần này: http://developer.yahoo.com/security/ –

+0

cảm ơn bạn đã tip –

4

Bạn đã có giải pháp trong mã của mình . Hàm php uniqid() cung cấp ... tốt, một ID duy nhất. Nếu bạn muốn đảm bảo nó thực sự thực sự thực sự thực sự độc đáo (mặc dù nó không cần thiết), chỉ cần thêm thời gian() để cuối cùng, như vậy:

return uniqid().time(); 

này cũng sẽ quay trở lại chữ trộn lẫn với số (entropy cao hơn) , như phản hồi này:

4eb8895a76edc1320716634 
+0

Bạn cũng có thể làm như thế này 'uniqid ('', TRUE)' sẽ thêm entropy bổ sung (sử dụng bộ tạo kết hợp tuyến tính kết hợp) ở cuối giá trị trả về, làm tăng khả năng kết quả sẽ là duy nhất. – DarkSide

Các vấn đề liên quan