View difference between Paste ID: 957KPn4p and
SHOW: | | - or go back to the newest paste.
1-
1+
/**************
2
This code is public domain.
3
4
This function increments a case-sensitive alphanumeric
5
number.  It will use as many digits as you give it.  If
6
it tries to increment a number that is at it's maximum
7
(eg "ZZ"), it returns boolean false.
8
**************/
9
10
define('NUMBER_START', ord('0'));
11
define('NUMBER_END', ord('9'));
12
define('LOWER_START', ord('a'));
13
define('LOWER_END', ord('z'));
14
define('UPPER_START', ord('A'));
15
define('UPPER_END', ord('Z'));
16
17
function incrementNumber($number) {
18
	if (strlen($number) == 0)
19
		return false;
20
	
21
	$number = str_split($number);
22
	$last = ord(array_pop($number));
23
	switch ($last) {
24
		case NUMBER_END:
25
			$last = LOWER_START;
26
			break;
27
		case LOWER_END:
28
			$last = UPPER_START;
29
			break;
30
		case UPPER_END:
31
			$last = NUMBER_START;
32
			$inc = incrementNumber(implode($number));
33
			if ($inc === false)
34
				return false;
35
			$number = str_split($inc);
36
			break;
37
		default:
38
			$last++;
39
	}
40
	$last = chr($last);
41
	$number[] = $last;
42
	return implode($number);
43
}
44
45
// Usage
46
echo incrementNumber('0000'); // outputs "0001"
47
echo incrementNumber('0aB4'); // outputs "0aB5"
48
echo incrementNumber('0aB9'); // outputs "0aBa"
49
echo incrementNumber('0aBz'); // outputs "0aBA"
50
echo incrementNumber('0aBZ'); // outputs "0aC0"