Risposta molto tardiva a una domanda già ben fatta, ma ecco la nostra soluzione. Genera una chiave con dimensione/lunghezza configurabile e suffisso opzionale basato su IPv4 valido, Userid (o qualsiasi intero significativo) o stringa di testo. Evita anche caratteri ambigui (i, 1, l, 0, o, O) nel risultato standard.
Aggiungiamo l'ID utente nella licenza e possiamo successivamente riconvertire quella parte in un numero intero di base10 e verificare se è valida contro l'account utente che sta utilizzando la licenza.
$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
Facciamo il check unicità nel database al momento della creazione, ma utilizzando l'IP/Userid in concomitanza con la casualità, la probabilità di duplicati è praticamente pari a zero.
/**
* 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;
}
Buono tutto informazioni – Fanis
Perfetto, solo il tipo di informazioni che stavo cercando :), Ottima lettura. +1 – RobertPitt
: -/questo è esattamente quello che ho detto. – Bot