在工作中遇到的一个小需求

夺宝码生成规则

  1. 夺宝码为6位,由大写字母和数字组成

  2. 生成为规则09,然后AZ;从最末位开始 如第一个夺宝码为000000,之后依次为000001000009,00000A00000Z;当末位数09和AZ都已使用完,则从倒数第二位继续

  3. 夺宝码为按照以上顺序依次生成

  4. 夺宝码每月1号0点清空重新生成

    根据上面的生成规则我们可以清楚的了解到这是一个典型的10进制转36进制的问题,生成代码如下

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
function makeTreasureCode($num = 0){
if(empty($num)) return [];

$outPut = array();
$outPut[] = base_convert($num, 10, 36);
$count = strlen($outPut[0]);

if ($count < 6) {
$k = 6 - $count;
for ($j = $k; $j > 0; $j--) {
array_push($outPut, 0);
}
}

$outPut = array_reverse($outPut);
$outPut = join('', $outPut);

return $outPut;
}

$num = 5 //生成夺宝码的数量
$code = makeTreasureCode($num);

echo '';
print_r($code);
echo '';
-------------本文结束感谢您的阅读-------------