Câu trả lời rất muộn cho câu hỏi đã được trả lời, nhưng đây là giải pháp của chúng tôi. Nó tạo ra một khóa với kích thước/chiều dài có thể cấu hình và hậu tố tùy chọn dựa trên IPv4 hợp lệ, Userid (hoặc bất kỳ số nguyên có ý nghĩa nào) hoặc chuỗi văn bản. Nó cũng tránh các ký tự mơ hồ (i, 1, l, 0, o, O) trong kết quả chuẩn.
Chúng tôi thêm Userid vào giấy phép và sau đó có thể chuyển đổi phần đó về số nguyên base10 và kiểm tra xem nó có hợp lệ với tài khoản người dùng đang sử dụng giấy phép hay không.
$license = generate_license();
// YF6G2-HJQEZ-8JZKY-8C8ZN
$license = generate_license(123456);
// ZJK82N-8GA5AR-ZSPQVX-2N9C
$license = generate_license($_SERVER['REMOTE_ADDR']);
// M9H7FP-996BNB-77Y9KW-ARUP4
$license = generate_license('my text suffix');
// Q98K2F-THAZWG-HJ8R56-MY-TEXT-SUFFIX
Chúng tôi kiểm tra tính duy nhất trong cơ sở dữ liệu khi tạo, nhưng khả năng trùng lặp gần như bằng không.
/**
* Generate a License Key.
* Optional Suffix can be an integer or valid IPv4, either of which is converted to Base36 equivalent
* If Suffix is neither Numeric or IPv4, the string itself is appended
*
* @param string $suffix Append this to generated Key.
* @return string
*/
function generate_license($suffix = null) {
// Default tokens contain no "ambiguous" characters: 1,i,0,o
if(isset($suffix)){
// Fewer segments if appending suffix
$num_segments = 3;
$segment_chars = 6;
}else{
$num_segments = 4;
$segment_chars = 5;
}
$tokens = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
$license_string = '';
// Build Default License String
for ($i = 0; $i < $num_segments; $i++) {
$segment = '';
for ($j = 0; $j < $segment_chars; $j++) {
$segment .= $tokens[rand(0, strlen($tokens)-1)];
}
$license_string .= $segment;
if ($i < ($num_segments - 1)) {
$license_string .= '-';
}
}
// If provided, convert Suffix
if(isset($suffix)){
if(is_numeric($suffix)) { // Userid provided
$license_string .= '-'.strtoupper(base_convert($suffix,10,36));
}else{
$long = sprintf("%u\n", ip2long($suffix),true);
if($suffix === long2ip($long)) {
$license_string .= '-'.strtoupper(base_convert($long,10,36));
}else{
$license_string .= '-'.strtoupper(str_ireplace(' ','-',$suffix));
}
}
}
return $license_string;
}
Tốt tất cả các thông tin xung quanh – Fanis
Hoàn hảo, Chỉ cần loại thông tin tôi đang tìm kiếm :), Rất tốt. +1 – RobertPitt
: -/đây chính xác là những gì tôi đã nói. – Bot