Tôi muốn tạo một ID ngắn, duy nhất mà không phải kiểm tra các xung đột.Tạo ID duy nhất ngắn PHP bằng cách sử dụng auto_increment?
Tôi hiện đang làm một cái gì đó như thế này, nhưng ID tôi hiện tạo là ngẫu nhiên và kiểm tra va chạm trong vòng lặp là gây phiền nhiễu và sẽ tốn kém nếu số lượng bản ghi tăng lên đáng kể.
Thông thường đáng lo ngại về sự va chạm không phải là vấn đề, nhưng ID duy nhất tôi muốn tạo là một chuỗi ngắn 5-8 ký tự, số alpha, giống như tinyurl.
EDIT: Tôi muốn bắt đầu với 5 ký tự và nếu tôi đạt 60 triệu mục nhập, sau đó chuyển đến 6 .. v.v.
Để kết thúc này, tôi đã nghĩ rằng tôi có thể sử dụng giá trị auto_increment bị ẩn khỏi người dùng và hiển thị chúng thay thế bằng MD5
hoặc một số phương pháp khác để tạo chuỗi duy nhất từ đó.
Chuỗi được tạo có vẻ không tuyến tính, vì vậy chỉ cần chuyển đổi ID tự động thành base 36
[0-9A-Z] hơi đơn giản, nhưng một chức năng giống như vậy là tôi sẽ làm điều này.
EDIT: Bảo mật không phải là vấn đề vì điều này sẽ không được sử dụng để bảo mật thông tin. Nó chỉ đơn giản là một phím tắt cho một chuỗi dài hơn. Cảm ơn bạn.
Cảm ơn bạn đã đề xuất và xin lỗi vì sự chậm trễ. Nha sĩ ..
Tôi thích ý tưởng này. Có một số mã cho tôi? 1-60000000 ánh xạ tới một chuỗi số 5 ký tự alpha? –
Xin lỗi tôi không tin tưởng toán học của tôi tại thời điểm này trong ngày vì vậy nó là một 31-bit. Đối với một 30-bit, bạn sẽ có chính xác 5 (đáng kể, tức là không có padding = 's) ký tự sau base64_encode nhưng tôi không thể tìm thấy một tham số thiết lập cho điều đó. – Wim
Tôi nghĩ rằng điều này có thể làm việc cho một cái 30-bit: a = 357913942, c = 1, m = 1073741823 (Nếu tôi không nhầm, nó đáp ứng các tiêu chí trong bài viết Wikipedia để nó có đầy đủ khoảng thời gian: m = 2 ** 31-1 = 3 ** 2 * 7 * 11 * 31 * 151 * 331, c = 1 vì vậy rõ ràng là trùng với m và a-1 = 3 * 7 * 11 * 31 * 151 * 331 là chia hết cho tất cả các yếu tố chính của m ...) – Wim