对一般的 4 位字母数字系列进行编码



尝试在PHP中编写通用的4位字母数字系列。

模式如下
0000
0001
....
....
9999
A000
货段:A001
型....
....
A999
B000
....
....
Z999
AA00
....
....
AA99
AB00
....
....
ZZ99
AAA0
....
....
AAA9
AAB0
....
....
兹兹

我试图根据 Z 的 no 和 9 的 no 来制作逻辑,但无法得到任何具体的东西。

我正在尝试编写一个代码,该代码将在输入系列的最后一个数字时返回该系列的下一个数字。

任何提示或线索将不胜感激

当使用PHP的内置增量运算符时,这实际上非常简单,该运算符能够处理这样的字母数字序列。

有两个

边界异常需要手动处理:

  1. 从数字到字母数字的第一次跳跃
  2. 终止系列

<?php
function getNext($input){
  // boundary cases
  switch($input){
    // bridge numeric to alphanumeric
    case '9999': return 'A000';
    // terminate sequence, instead of expanding to 5 digits 'AAAA0'
    case 'ZZZ9': return 'ZZZA';
    // start over
    case 'ZZZZ': return '0000';
  }
  // normal increment
  $input = substr(++$input,0,4);
  // pad with leading zeros
  return str_pad($input, 4, '0', STR_PAD_LEFT);
}
$samples = [
  '0000','9999','A000','A999','Z999','AA99',
  'ZZ99','AAA9','ZZZ9','ZZZA','ZZZY','ZZZZ'
];
foreach ($samples as $sample)
  echo $sample . ' -> ' . getNext($sample) . PHP_EOL;

0000 -> 0001
9999 -> A000
A000 -> A001
A999 -> B000
Z999 -> AA00
AA99 -> AB00
ZZ99 -> AAA0
AAA9 -> AAB0
ZZZ9 -> ZZZA
ZZZA -> ZZZB
ZZZY -> ZZZZ
ZZZZ -> 0000

请参阅此相关答案。

你可以尝试这样的事情:

<?php
function generateNext($input) {
    $numbers = (int) preg_replace('/[^0-9]/', '', $input);
    $letters = preg_replace('/[^a-zA-Z]/', '', $input);
    if($numbers >= 99) 
    {
        $letters = ++$letters;
        $numNumbers = 4 - strlen($letters);
        if($numNumbers === 0) 
        {
            $numbers = "";
        }
        else
        {
            $numbers = str_pad("1", $numNumbers, "0", STR_PAD_LEFT);
        }
        $final = $letters.$numbers;
    }
    else if($input == "ZZZ9")
    {
        $final = "ZZZZ";
    }
    else 
    {
        $numbers = ++$numbers;
        $numNumbers = 4 - strlen($letters);
        if($numNumbers === 0) 
        {
            $numbers = "";
            $letters = ++$letters;
        }
        else
        {
            $numbers = str_pad($numbers, $numNumbers, "0", STR_PAD_LEFT);
        }
        $final = $letters.$numbers;
    }
    return $final;
}
?>

最新更新