-
Notifications
You must be signed in to change notification settings - Fork 1
/
SunLicense.php
137 lines (123 loc) · 3.27 KB
/
SunLicense.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
//error_reporting(E_ALL);
//ini_set('display_errors', TRUE);
/**
* SunLicense Class
*
* @category License Key Generator
* @package SunLicense
* @author Mehmet Selcuk Batal <batalms@gmail.com>
* @copyright Copyright (c) 2022, Sunhill Technology <www.sunhillint.com>
* @license https://opensource.org/licenses/lgpl-3.0.html The GNU Lesser General Public License, version 3.0
* @link https://github.com/msbatal/PHP-License-Key-Generator
* @version 1.1.0
*/
class SunLicense
{
/**
* Prefix to be added to the key
* @var string
*/
private $prefix = null;
/**
* Template of the key
* @var string
*/
private $template = 'X9XX99-XX99-9X9X-99XX9X';
/**
* Case of letters in generated key
* @var string
*/
private $case = 'upper';
/**
* Number of keys to generate
* @var integer
*/
private $keyCount = 1;
/**
* Generated keys
* @var array
*/
public $keys = [];
/**
* @param string $prefix
* @param string $template
* @param integer $count
*/
public function __construct($prefix = null, $template = null, $case = 'upper', $count = null) {
set_exception_handler(function($exception) {
echo '<b>[SunClass] Exception:</b> '.$exception->getMessage();
});
if (!empty($prefix)) {
$this->prefix = $prefix; // prefix to be added to the key
}
if (!empty($template)) {
$this->template = $template; // template of the key
}
if (!empty($case)) {
$this->case = $case; // case of letters (upper/lower)
}
if (!empty($count) && is_int($count)) {
$this->keyCount = $count; // number of keys to generate
}
}
/**
* Generate product license key
*
* @return string
*/
private function license() {
$key = null;
if (!empty($this->prefix)) {
$key .= $this->prefix . '-'; // add prefix at beginning of the key
}
for ($i = 0; $i < strlen($this->template); $i++) {
if (preg_match('/[a-zA-Z]/', $this->template[$i])) {
if ($this->case == 'lower') {
$key .= chr(rand(97, 122)); // generate lowercase letters
} else {
$key .= chr(rand(65, 90)); // generate uppercase letters
}
} else if (preg_match('/\d/', $this->template[$i])) {
$key .= rand(0, 9); // generate numbers
} else {
$key .= '-'; // generate symbols
}
}
return $key;
}
/**
* Check if key is generated before
*
* @param string $key
* @return boolean
*/
private function check($key = null) {
if (in_array($key, $this->keys)) {
return true; // if already generated
} else {
return false; // if not generated before
}
}
/**
* Call main method and return the generated keys
*
* @throws exception
* @return string|array
*/
public function generate() {
$key = null;
while (!$this->check($key) && count($this->keys) < $this->keyCount) {
$this->keys[] = $this->license(); // add generated keys into the array
}
if (count($this->keys) == 0) {
throw new Exception('An error occurred while generating the license keys.');
}
if (count($this->keys) == 1) {
return $this->keys[0]; // returns a string (single key)
} else {
return $this->keys; // returns an array (multiple keys)
}
}
}
?>