需求:创建一个指定长度唯一字符串。
条件:字符串的形式小写字母和数字组合。创建的字符串长度从4位开始。
短链
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
class shortUrl
{
private $charList = 'abcdefghijklmnlopqrstuvwxyz1234567890';//26+10=36个字符
private $baseCounter = 36 * 36 * 36 + 1;
/**
* generate a unique id by a integer
* @param number, int
* @param charlist, string
* @return string
*/
public static function encode($number, $charlist)
{
$charArray = str_split($charlist);
$base = count($charArray);
$chars = '';
$rest = $number % $base;
$chars = $charArray[$rest];
if ($number - $rest != 0) {
$number = ($number - $rest ) / $base;
$chars = self::encode($number, $charlist) . $chars;
}
return $chars;
}
/**
* decode the encode string
* @param input, string
* @param charlist, string
* @return int
*/
public static function decode($input, $charlist)
{
$number = 0;
$chars = str_split(strrev($input));
$dictionary = str_split($charlist);
$base = count($dictionary);
$length = strlen($input);
for ($i = $length; $i > 0; --$i) {
$number += array_search($chars[$i-1], $dictionary) * pow($base, ($i - 1));
}
return $number;
}
}